[英]Parsing input options containing whitespaces in a bash script
我有一個bash腳本解析輸入選項,並帶有如下代碼塊
for WORD in "$@" ; do
case $WORD in
--*) true ;
case $WORD in
--opt1=*)
OPT1=${WORD/--opt1=/}
shift ;;
--opt2=*)
OPT2=${WORD/--opt2=/}
shift ;;
*) echo "Unrecognized argument $WORD"
;;
esac ;;
*) echo "Option $WORD not starting with double dash."
;;
esac
done
該腳本由另一個創建整個命令行的父程序調用。 該父程序創建的輸出看起來像
./childscript.sh "--opt1=value1 --opt2=value2"
當生成的行看起來像
./childscript.sh "--opt1='value11 value12' --opt2=value2"
劇本抱怨說
Option value12 not starting with double dash.
如何修改子bash代碼以使其理解輸入選項內的空格?
我認為生成的行不是您認為的那樣。
如果我直接調用它,您的代碼對我來說就可以正常工作。 添加回顯以檢查值是否存儲在正確的位置:
$ ./child.sh --opt1='v1 v2' --opt2='v3 v4'
OPT1='v1 v2'
OPT2='v3 v4'
您應該能夠確認這一點。 您的問題不是使子腳本接受此類參數,而是使父腳本正確地調用它。
順便說一句,你實際上並不想運行是這樣的:
./childscript.sh "--opt1=value1 --opt2=value2"
這將導致整個字符串( --opt1=value1 --opt2=value2
)作為單個參數讀取。 我懷疑您沒有告訴我們有關父腳本調用此方法的完整故事。 如果您向我們顯示這些詳細信息,我們可能會提供更多幫助-也許這就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.