2017-12-15 13 views
0

나는 아래의 코드 스 니펫을 보았으며 정확하게 목적이 무엇인지 알지 못했습니다. -? while 루프에서. 이 매개 변수에 대한 여러 사이트 및 포럼을 검색했지만 정확한 답변을 얻을 수 없습니다.Korn 스크립트 매개 변수

모든 입력 부탁드립니다. 감사합니다. 대괄호 내의 KSH에서

while [[ $1 = -? ]]; do 
    case $1 in 
    -a) a1=alligator ;; 
    -b) a2=bear ;; 
    -c) a3=cougar ;; 
    esac 
    shift 

답변

2

, 상기 === 사업자 패턴 매칭 용으로 : [[ string = pattern ]] [1]

이들은 쉘 경로 확장 패턴이다. ?은 단일 문자와 일치합니다.

따라서 테스트 할 대상은 $1이 하이픈과 일치하고 임의의 단일 문자와 일치하는 경우입니다. 즉, 첫 x 째 위치 매개 변수는 옵션. 자 열과 같습니다.

[1] - 문자열 동일성 검사를 수행하기 위해 패턴에 특수한 globbing 문자가 없거나 이러한 문자가 인용되거나 이스케이프됩니다.


은 IMO, 옵션 구문 분석을 할 수있는보다 강력한 방법은 getopts 내장 함께 :

while getopts :abc opt; do 
    case $opt in 
     a) a1=alligator ;; 
     b) a2=bear ;; 
     c) a3=cougar ;; 
     :) print -u2 "error: missing required argument for -$OPTARG" ;; 
     ?) print -u2 "unknown option: -$OPTARG" ;; 
    esac 
done 
shift $((OPTIND - 1)) 
+0

고마워요 선생님! 이것은 나에게 많은 도움을 주었고 당신의 자세한 설명과 다른 접근법에 +1을 주었다. – dev