簡體   English   中英

在bash腳本中解析包含空格的輸入選項

[英]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.

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