쉘 (sh)에 다음 테스트를 표시하려면 다음을 수행하십시오.
if ( a == 1 && ( b == 1 || b == 2 )) { ... }
지금까지 내가 쓸 수 있었던 최선은 다음과 같습니다.
if [[ $a -eq 1 ]]; then
if [[ $b -eq 1 || $b -eq 2 ]]; then
...
fi
fi
&&와 ||를 합성하는 방법을 모르겠습니다. 올바른 우선 순위로. 인터넷 검색에서 답을 얻지 못했습니다 (자습서는 기본 예만 제공합니다)
두 결합하는 구문은 무엇입니까 경우 하나로는?
답변
참고 [[ ]]
Bourne 쉘 또는 POSIX 중 하나에 있지 않습니다 sh
. 실제 sh
구문에는 여러 가지 방법이 있습니다.
한 [ ]
쌍만 사용
if [ 1 -eq "$a" -a \( 1 -eq "$b" -o 2 -eq "$b" \) ]; then
# ...
fi
또는 POSIX -a
및 -o
옵션 피하기 1
if [ 1 -eq "$a" ] && { [ 1 -eq "$b" ] || [ 2 -eq "$b" ]; }; then
# ...
fi
하나 하나 피하는 이유 -a
및 -o
최대 휴대 성입니다 – 모든 test
또는 [
구현 당신이 표현을 체인 경우에 당신이 무엇을 얻을 정확히 4 개 이상의 인수를 처리 할 수 -a
및 -o
및 \( \)
.
답변
나는 몇 가지 구문을 시도하고 그것을 발견
if [[ $a -eq 1 ]] && [[ $b -eq 1 || $b -eq 2 ]]; then
...
fi
작동합니다.
답변
다른 POSIX 접근법 :
if [ "$((a == 1 && ( b == 1 || b == 2 )))" -ne 0 ]; then
...
fi
답변
간단한 방법으로 수행하는 올바른 방법 shell
:
if test 1 -eq "$a" && test 1 -eq "$b" -o 2 -eq "$b"; then
...
fi
설명:
test
여기서는 괄호와 -o
논리적 또는 역할을합니다 . 논리적이고 “괄호”안에 있으면을 사용 -a
합니다.
이에 대한 자세한 내용은 여기를 참조하십시오.