Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析bash脚本中包含空格的输入选项_Bash_Shell_Input_Whitespace - Fatal编程技术网

解析bash脚本中包含空格的输入选项

解析bash脚本中包含空格的输入选项,bash,shell,input,whitespace,Bash,Shell,Input,Whitespace,我有一个bash脚本解析输入选项,其中包含如下代码块 for WORD in "$@" ; do case $WORD in --*) true ; case $WORD in --opt1=*) OPT1=${WORD/--opt1=/} shift ;; --opt2=*) OPT2=${WORD/--opt2=/} shift ;; *) echo "Unr

我有一个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"
当生成的行看起来像

./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
)作为单个参数读取。我怀疑你还没有告诉我们关于父脚本调用这个的完整故事。如果您向我们展示这些细节,我们可能会提供更多帮助,或者这就足够了。

Opps,我的错。是的,你是对的,这不是全部内容。我复制的代码在一个函数parse_input()中,我用parse_input$调用它。@@charlichth75:在该
$@
上没有引号?它应该经常被引用。