쉘의 복잡한 조건에 대한 구문은 무엇입니까?

쉘의 복잡한 조건에 대한 구문은 무엇입니까?

쉘(sh)에서 다음 테스트를 표현하려면:

if ( a == 1 && ( b == 1 || b == 2 )) { ... }

지금까지 내가 쓸 수 있는 가장 좋은 것은 다음과 같습니다.

if [[ $a -eq 1 ]]; then
  if [[ $b -eq 1 || $b -eq 2 ]]; then
     ...
  fi
fi

&&와 ||를 올바른 우선순위로 조합하는 방법을 모르겠습니다. 인터넷 검색에서는 아무런 답변도 제공되지 않았습니다(튜토리얼에서는 기본적인 예만 제공합니다).

이 두 가지를 결합하는 구문은 무엇입니까만약에하나가 되시겠습니까?

답변1

[[ ]]Bourne 또는 POSIX 에는 없습니다 sh. 실제 sh구문의 경우 이를 수행하는 방법에는 여러 가지가 있습니다.

[ ]쌍만 사용하세요

if [ 1 -eq "$a" -a \( 1 -eq "$b" -o 2 -eq "$b" \) ]; then
    # ...
fi

또는-aPOSIX 및 -o옵션 피하기1

if [ 1 -eq "$a" ] && { [ 1 -eq "$b" ] || [ 2 -eq "$b" ]; }; then
    # ...
fi

1-a AND를 피하는 한 가지 이유 -o는 최대 이식성입니다. 모든 testOR [구현이 4개 이상의 인수를 처리할 수 있는 것은 아닙니다. 이는 정확히 -aAND 및 연결된 표현식을 사용할 -o때 얻을 수 있는 것과 같습니다 \( \).

답변2

나는 몇 가지 구문을 시도하고 발견했습니다.

if [[ $a -eq 1 ]] && [[ $b -eq 1 || $b -eq 2 ]]; then
 ...
fi

직장에서.

답변3

또 다른 POSIX 접근 방식:

if [ "$((a == 1 && ( b == 1 || b == 2 )))" -ne 0 ]; then
  ...
fi

답변4

올바른 방법은 다음과 같습니다 shell.

if test 1 -eq "$a" && test 1 -eq "$b" -o 2 -eq "$b"; then 
    ...
fi

설명하다:

test여기서는 괄호 및 -o논리 OR 역할을 합니다. 논리가 있고 "괄호" 안에 있으면 -a.

더 많은 관련 콘텐츠를 찾아보실 수 있습니다여기

관련 정보