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