我有一个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代码以使其理解输入选项中的空格?
答案 0 :(得分:1)
我不认为生成的行是您认为的那样。
如果我直接调用它,你的代码对我来说完全没问题。添加回声以检查值是否存储在正确的位置:
$ ./child.sh --opt1='v1 v2' --opt2='v3 v4'
OPT1='v1 v2'
OPT2='v3 v4'
您应该能够确认这一点。你的问题不是让子脚本接受这样的参数,而是让父脚本正确地调用它。
顺便说一下,你不实际上想要运行这样的东西:
./childscript.sh "--opt1=value1 --opt2=value2"
这将导致整个字符串(--opt1=value1 --opt2=value2
)被读作单个参数。我怀疑你没有告诉我们关于父脚本调用它的方式的完整故事。如果你向我们展示这些细节,我们可能会提供更多帮助 - 或者这可能是一个暗示。