2017-10-02 16 views
0

こんにちは、私は基本的な質問を持っているが、私は良い答えgetoptsは同じフラグ2回

私はこのコード持って見つけることができませんでした:「-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

関連する問題