이것이 맞는지 아는 사람 있나요? 이것이 Bash의 "else" 문 안에 배열을 만드는 올바른 방법입니까?
else [[ $SELECTION != "a|b|c|x" ]]
답변1
나는 당신의 목적이 $SELECTION
다음과 같은지 테스트하는 것이라고 가정합니다.아니요 a
, b
, c
또는 x
, 명령문의 "else-if" 분기에서 이 작업을 수행하려고 합니다 if
.
테스트에서는 $SELECTION
리터럴 문자열이 아닌지 테스트합니다 a|b|c|x
. "else-if" 분기(다음과 같이 작성됨)에서 테스트를 사용하려는 경우 구문이 올바르지 않습니다 elif [[ ... ]]
.
, , 또는 이외의 다른 것이 $SELECTION
있는지 테스트하려면 다음을 사용할 수 있습니다 .a
b
c
x
if ...; then
...
else
case $SELECTION in
a|b|c|x)
# do nothing here
;;
*)
echo 'it is not a, b, c, or x'
esac
fi
case
이는 주어진 값이 |
구분된 패턴과 일치 하면 아무 작업도 수행하지 echo
않고 일치하지 않으면 호출하는 POSIX 표준 문을 사용합니다 .
또는,
if ...; then
...
elif [[ $SELECTION != @(a|b|c|x) ]]; then
echo 'it is not a, b, c, or x'
fi
|
이는 inside 로 구분된 모든 패턴과 일치하는 확장된 와일드카드 패턴을 사용합니다 @(...)
.
또는 어색한 테스트를 제거하세요 !=
.
if ...; then
...
elif [[ $SELECTION == !(a|b|c|x) ]]; then
echo 'it is not a, b, c, or x'
fi
패턴은 인용 해제되어야 합니다. 테스트가 elif
브랜치에서 수행되는지 여부는 테스트 자체와 관련이 없습니다.
매뉴얼의 "패턴 일치" 섹션을 참조하십시오 bash
.