명령문 테스트 |
로 분리 된 다른 문자열로 구성된 변수를 사용하려고합니다 case
. 예를 들면 다음과 같습니다.
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
문의 첫 부분 을 입력 foo
하거나 bar
실행할 수 있기를 원합니다 case
. 그러나 두 foo
와 bar
두 번째에 데려다 :
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
사용은 "$string"
대신에 $string
차이가 없습니다. 둘 다 사용하지 않습니다 string="foo|bar"
.
나는 이런 식으로 할 수 있다는 것을 안다.
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
다양한 해결 방법을 생각할 수 있지만 case
bash에서 변수를 조건 으로 사용할 수 있는지 알고 싶습니다 . 가능하다면 어떻게합니까?
read
비트가 나를 막았다. 내 의견으로는 사용자 입력 유효성 검사는 case
패턴으로 평가 목록의 최상위에 있지 않아야하며 *
기본 패턴 으로 잘라내어 도달하는 유일한 결과가 허용되도록 보장해야합니다. 여전히 문제는 파싱 / 확장 순서이기 때문에 두 번째 평가가 필요할 수 있습니다.
eval
$ 선택, 이스케이프, 별표, 세미콜론 및 줄 바꿈을 탈출 하여 사례 진술을 래핑 할 수 있습니다. 추악하지만 "작동"합니다.