繁体   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