簡體   English   中英

bash編程中的getopts

[英]getopts in bash programming

當我使用'while getopts d:n:OPTION'時-我怎么知道我只有無效的選項,如果是,那后面還有一個參數?

您知道您的選項無效,因為返回值為'?'。

或者:

  • 您無法判斷它是否有參數,因為該選項無效。

要么:

  • 您必須查看下一個參數,看看它是否以短划線開頭。

“或”選項中的啟發式方法是不完善的。 通過選項捆綁,我可以寫:

command -xbf/fidget
  1. 如果getopts選項字符串為'xf:' ,則'b'為無效選項。
  2. 如果getopts選項字符串為'xbf:' ,則有效選項'b'之后將有一個選項'f'和選項參數'/ fidget'。
  3. 如果getopts選項字符串是'xb:f: ',則'b'的選項參數將是'f / fidget'。

我認為“任何一種”態度都是正確的-您無法分辨。


來自名為“ rcsunco”的命令的代碼片段-取消RCS檢出(並在我勉強離開SCCS時編寫):

remove=yes
keep=no
get=no
quiet=

while getopts gknqrV opt
do
        case $opt in
        V)  echo "`basename $0 .sh`: RCSUNCO Version $Revision: 2.1 $ ($Date: 2002/08/03 07:41:00 $)" |
            rcsmunger
            exit 0;;
        g)  get=yes;;
        k)  keep=yes;;
        n)  remove=no;;
        q)  quiet=-q;;
        r)  remove=yes;;
        *)  echo "Usage: `basename $0 .sh` [-{n|g}][-{r|k}] file [...]" 1>&2
            exit 1;;
        esac
done

shift $(($OPTIND-1))

這些天來,我在“案例”中使用了“平衡括號”表示法:

        (q) quiet=-q;;

還要注意,我沒有明確測試返回哪個選項-我讓所有的'*'案例都處理了。 我還觀察到用法消息不完整(沒有記錄“ -V”或“ -q”),並且代碼足夠老,以至於我沒有添加“ -h”作為幫助選項。 腳本“ rcsmunger”僅將“ $Revision 2.1 $ ”替換$Revision 2.1 $2.1 ”,更像SCCS用“ 2.1”替換“%I%”的方式。

無效的選項將帶有問號?...如果有問號,則對命令行參數的IIRC處理將停止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM