您可以使用getopts
內部bash功能。嘗試這樣的例子:
while getopts abc: name; do
echo $name, OPTARG: $OPTARG, OPTIND: $OPTIND, OPTERR: $OPTERR
done
運行:./test -ab -c file
結果:
a, OPTARG: , OPTIND: 1, OPTERR: 1
b, OPTARG: , OPTIND: 2, OPTERR: 1
c, OPTARG: file, OPTIND: 4, OPTERR: 1
變量name
將被設置爲解析參數。如果在字符後面有:
,則預期將其置於OPTARG
變量的參數。 OPTIND
顯示下一個要處理的參數。
如果設置了OPTERR
,則如果發生錯誤,則bash將顯示錯誤消息。如果第一個參數是:
那麼錯誤消息被抑制。
運行:./test -d
結果:
./test: illegal option -- d
?, OPTARG: , OPTIND: 2, OPTERR: 1
或./test -c
(-c
需要一個額外的參數)
結果:
./test: option requires an argument -- c
?, OPTARG: , OPTIND: 2, OPTERR: 1
這樣你就可以測試是否name
是?
那麼這是一個不好的選擇。
這工作,但如果我把 「:AB:」 和一個)回聲「我的名字是.. B)呼應我的年齡是......如果你做了-ab而不是說另一句話,我應該怎麼設置呢? – user2252399
@ user2252399'getopts'只支持一個字符選項,它是內置bash。如果你想要你可以看一下'getopt',它是一個外部工具(不是內置的),它可以處理多字符參數,並帶有雙短劃線前綴。這裏的[man page](http://www.manpagez。com/man/1/getopt /) – wizard
@ user2252399 With:ab:b選項需要參數。你可以用'-ab foo'來調用它,並且同時執行兩個case標籤 - 同時遍歷所有選項。 – Jens