Bash
超過 4 個解析器參數的 getopts
我想使用下面的程式碼在腳本中解析多個
getopts
參數bash
。while getopts b:B:m:M:T flag do case "${flag}" in b) rbmin=${OPTARG};; B) rbmax=${OPTARG};; m) mbmin=${OPTARG};; M) mbmax=${OPTARG};; T) sigType=${OPTARG};; esac done echo $rbmin,$rbmax,$mbmin,$mbmax, $sigType
[amit@amitk]$ sh pass.sh -b 0.1 -B 0.3 -m 10 -M 11 -T sig 0.1,0.3,10,11,
我不知道為什麼我不能傳遞超過四個參數。有什麼建議麼?
您似乎
:
在T
給定的選項字元串中缺少getopts
. 這:
表明-T
需要一個選項參數。沒有
:
,-T
將是一個沒有參數的選項,並且您的呼叫將sig
作為操作數留在命令行末尾,而不是作為選項參數。while getopts b:B:m:M:T: flag do case $flag in b) rbmin=$OPTARG ;; B) rbmax=$OPTARG ;; m) mbmin=$OPTARG ;; M) mbmax=$OPTARG ;; T) sigType=$OPTARG ;; *) echo error >&2 exit 1 esac done shift "$(( OPTIND - 1 ))" echo "$rbmin,$rbmax,$mbmin,$mbmax, $sigType" if [ "$#" -gt 0 ]; then printf 'Other operands: %s\n' "$*" fi
測試:
$ sh script -b 0.1 -B 0.3 -m 10 -M 11 -T sig 0.1,0.3,10,11, sig
$ sh script -b 0.1 -B 0.3 -m 10 -M 11 -T sig hello bumblebee 0.1,0.3,10,11, sig Other operands: hello bumblebee
另請注意,如果您使用顯式解釋器(如
sh
)執行腳本,則可能不會使用bash
. 我之所以提到這一點,是因為您bash
在問題中提到了“腳本”。在這種情況下,可以,因為腳本不需要bash
,但最好使用#!
頂部帶有正確 - 行的執行檔。