解析bash脚本中包含空格的输入选项
我有一个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
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:在该$@
上没有引号?它应该经常被引用。