나는 아래의 bash 스크립트가 getopts
을 사용하고있다. 내 코드가 예상대로 작동합니다. 즉, 잘못된 옵션이 지정되면 $ myopt 변수가 '?'로 설정됩니다. character와 case 문은 '?'와 일치하는 코드를 올바르게 처리합니다.
다른 곳에서 '\를 사용하여 비슷한 코드를 볼 수 있습니까?' 그냥 '대신에?' case 문에서 (코드 블록의 마지막 세 개의 주석 처리 된 행을 참조하십시오).'?'을 확인하는 올바른 방법은 무엇입니까? case 문에서
왜 '?' 도망 간다? 어떤 charcter도 '\'를 사용하여 이스케이프 처리 될 수 있다는 것을 알고 있지만 내 코드는 '?'를 이스케이프 처리하지 않고 완벽하게 작동합니다.
#!/bin/bash
while getopts ":abc" myopt; do
case $myopt in
[a-c])
echo "$myopt is a valid option!" >&2
;;
?)
echo "$OPTARG is an invalid option!" >&2
;;
# \?)
# echo "$OPTARG is an invalid option!" >&2
# ;;
esac
done
다른 읽기 기능을 활용하려면 아래 코드가 '?'인 경우에만 작동합니다. 이스케이프 처리됩니다 (좋은 설명을 보려면 답변을 참조하십시오).
#!/bin/bash
while getopts ":abc" myopt; do
case $myopt in
\?)
echo "$OPTARG is an invalid option!" >&2
;;
[a-c])
echo "$myopt is a valid option!" >&2
;;
esac
done
스크립트 파일이 myscript.sh 인 경우는 다음과 같이 테스트 할 수 있습니다 - 배쉬 case
선언문 ?
를 들어
./myscript.sh -a -z -a
또 다른 이유 : 옵션 중 하나에 인수가 필요하다고 가정하면 'getopts': abcd : "myopt"입니다. 사용자가 인수를 제공하지 못하면, myopt는':'를 포함하고'?)'브랜치에 의해 넘어 가서 오해 될 수있는 오류 메시지를 보냅니다. –