我有这种奇怪的行为,我无法理解;在某些时候我需要将一些标志传递给我的脚本,特别是一个标志应该执行我的脚本中使用的一系列选项,例如我正在调用我的脚本
sh script.sh --flag1="-options1=value1 -options2=value2" --flag2
结果是
-options1=value1
-options2=value2
1
,所以flag1
神奇地显示为多行声明,并且发生了一些事情,我并没有真正理解这种行为背后的逻辑。
这是完整的脚本
parse()
{
while [ $# -gt 0 ]
do
case "$1" in
--flag1=* ) FLAG_1="${1#*=}"; shift;;
--flag2 ) FLAG_2="1"; shift;;
(*) printf $0' : error - unrecognized option '$1'\n' 1>&2; exit 1;;
esac
done
}
printvar()
{
printf %s'\n' $FLAG_1
printf %s'\n' $FLAG_2
}
parse "$@"
printvar
我在这里做错了什么?
答案 0 :(得分:2)
要将FLAG_1作为单行,只需引用变量:
printf "%s\n" "$FLAG_1"
以下代码段应澄清:
$ printf "%s\n" ab cd
ab
cd
$ printf "%s\n" "ab cd"
ab cd