다음 명령문에서 여러 조건을 테스트하려고 합니다 if
.
If [[[ "$var1" = "$var2" || "$var1" = "$var3" || "$var1" = "$var4" ]]];
그러나 위 구문을 실행하면 오류가 발생합니다. IF 문에서 여러 조건을 확인하는 데 도움을 줄 수 있는 사람이 있습니까?
답변1
괄호가 너무 많아서 if
대문자로 표기하면 안 됩니다. 이 시도:
if [[ "$var1" == "$var2" || "$var1" == "$var3" || "$var1" == "$var4" ]]; then
답변2
sh
(철자 오류, [[
대체 해야 함 [[[
) 구문을 사용하는 것보다 표준 구문을 사용하는 것이 ksh
더 쉬울 수 있습니다.
case $var1 in
"$var2" | "$var3" | "$var4") echo match;;
*) echo no match;;
esac
답변3
[[ "$var1" == "$var2" || "$var1" == "$var3" || "$var1" == "$var4" ]]
또는 가독성을 위해
[[ "$var1" == "$var2" ]] ||
[[ "$var1" == "$var3" ]] ||
[[ "$var1" == "$var4" ]]
또는 case
,Stefan Chazeras가 제안한 것처럼, 또는 변수 이름에 대해 지나치게 복잡한 루프를 수행하고 이름 참조( bash
또는 ksh93
)를 사용합니다.
for var in var2 var3 var4; do
typeset -n v="$var"
if [[ "$var1" == "$v" ]]; then
# printf '%s has same value as var1\n' "$var"
found=1
break
fi
done
if [[ "$found" -eq 1 ]]; then ...