쉘(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
또는-a
POSIX 및 -o
옵션 피하기1
if [ 1 -eq "$a" ] && { [ 1 -eq "$b" ] || [ 2 -eq "$b" ]; }; then
# ...
fi
1-a
AND를 피하는 한 가지 이유 -o
는 최대 이식성입니다. 모든 test
OR [
구현이 4개 이상의 인수를 처리할 수 있는 것은 아닙니다. 이는 정확히 -a
AND 및 연결된 표현식을 사용할 -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
.
더 많은 관련 콘텐츠를 찾아보실 수 있습니다여기