2017-10-02 8 views
0

안녕 난 기본적인 질문이 있습니다하지만 난 좋은 답변getopts가 같은 플래그를 두 번

이 코드가 찾을 수 없습니다 : "-P

while getopts :weco:r:u:hP: ARG; do 
    case $ARG in 
      . 
      . 
      . 

    h) #set option "h" - show help; 
     help 
     ;; 
    P) #set option "P" - select Printer; 
     PRINTER=$OPTARG 
     ;; 
    \?) #unrecognized option - show help 
     echo -e \\n"Option not recognized." 
     help 
     ;; 
    esac 
done 

그리고 지금 내가 사용하려는를 "두 번,"-P PRINTER "를 사용하면 지정된 프린터를 사용하지만"-P "를 사용하면 파일에서 읽은 기본값을 사용합니다.

이렇게 관리 할 수 ​​있습니까? 그것이 정답이라면 미안 해요. 지금은 시험 할 수 없습니다.

while getopts :weco:r:u:hP:P ARG; do 
    case $ARG in 
      . 
      . 
      . 

    h) #set option "h" - show help; 
     help 
     ;; 
    P) #set option to use default 
     PRINTER=BLAFOO 
    P) #set option "P" - select Printer; 
     PRINTER=$OPTARG 
     ;; 
    \?) #unrecognized option - show help 
     echo -e \\n"Option not recognized." 
     help 
     ;; 
    esac 
done 
+0

이 답변은 당신을 도울 것이라고 생각합니다. https://stackoverflow.com/a/21709328/2088135 -'getopts' 루프 나'if' 블록 앞에 기본값을 설정할 수 있습니다. –

답변

0

getopts은 사용자가 원하는 것을 지원하지 않으므로 독자적인 인수 구문 분석기를 다시 작성하는 것이 좋습니다.

while true; do 
    case $1 in 
    -h) #set option "h" - show help; 
     echo help 
     shift 
     ;; 
    -P) #set option "P" - select Printer; 
     shift 
     case $1 in 
     ""|-*) 
     PRINTER=BLAFOO 
     ;; 
     *) 
     PRINTER=$1 
     shift 
     ;; 
     esac 
     # echo PRINTER=$PRINTER 
     ;; 
    -*|*) #unrecognized option - show help 
     echo -e \\n"Option not recognized." 
     echo help 
     break ;; 
    esac 
done 
+0

@Nico, 당신을 위해 일은 무엇입니까? 가능하면 피드백을주십시오. – CWLiu