我創建了一個涉及解析參數的bash腳本。用法是:使用值列表解析標誌
$ ./my_script.sh -a ARG_1 -b ARG_2 [-c LIST_OF_ARGS...]
使用getopts
我能夠解析-a
和-b
並獲得各自的價值ARG_1
和ARG_2
。當且僅當用戶將-c
作爲最後一個參數時,我也可以得到-c
並創建一個列表,其中包含所有LIST_OF_ARGS...
中的值。
但我不想強制用戶插入-c
作爲最後一個標誌。舉例來說,那將是巨大的,如果該腳本可以通過這種方式調用:
$ ./my_script.sh -b ARG_2 -c V1 V2 V3 -a ARG_1
這裏是我當前的代碼:
while getopts a:b:c opt
do
case $opt in
a)
A_FLAG=$OPTARG
;;
b)
B_FLAG=$OPTARG
;;
c)
# Handle values as regular expressions
args=("[email protected]")
C_LIST=()
for ((i=$OPTIND-1 ; i <= $#-1 ; i++))
do
C_LIST=("${C_LIST[@]}" ${args[$i]})
done
;;
?)
usage
;;
esac
done
'getopts'不支持多參數選項。你基本上需要手動解析參數,計算遵循'-c'作爲參數傳遞給該選項的參數,直到你到達另一個定義選項或列表的末尾。 – chepner
在現有的代碼,你會過得更好寫一個簡單的表達式:'C)C_LIST =( 「$ OPTARG」 「$ {@:$ OPTIND}」);;'這將正確處理'的情況下-cV1 V2 V3 '而且它也縮短了很多。 (另外,學會在數組上使用'+ =')。但是這並不能回答你的問題。 – rici