将唯一字符串解析为posix sh shell中的变量

时间:2014-03-18 12:58:40

标签: shell posix sh

我有这种奇怪的行为,我无法理解;在某些时候我需要将一些标志传递给我的脚本,特别是一个标志应该执行我的脚本中使用的一系列选项,例如我正在调用我的脚本

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

要将FLAG_1作为单行,只需引用变量:

printf "%s\n" "$FLAG_1"

以下代码段应澄清:

$ printf "%s\n" ab cd
ab
cd
$ printf "%s\n" "ab cd"
ab cd