如何在printf
字符串中使用破折号?
x=xxx
printf -v args "-x=%s" "$x"
printf "$var"
但它给出了一个错误:
./tmp.sh: line 2: printf: -x: invalid option
printf: usage: printf [-v var] format [arguments]
我知道这是因为printf
解释-x
为一种选择,但如何克服它?
我用来printf
创建一个与命令行参数相对应的字符串,例如-x=xxx -y=yyy -z=zzz
.然后我想调用一个工具,比如
eval $tool args
答案1
printf
支持传统的选项结束参数--
:
$ printf -- '-x\n'
-x
答案2
您可以使用 options ( ) 参数的结尾--
来按printf
字面意思处理破折号:
printf -v var -- '-x=%s' "$x"
输出:
$ x=xxx && printf -v var -- '-x=%s' "$x" && echo $var
-x=xxx
答案3
由于您printf
似乎采用选项,因此使用格式字符串来输出-x
变量的值和值:
printf '%s=%s' '-x' "$x"
要使用预先生成的命令行调用工具,请勿将命令行参数放入字符串中。用于set
设置以下值$@
:
set -- -x="$x" -y="$y" -z="$z"
然后调用该工具:
tool "$@"
这将确保该工具获取正确数量的参数并正确引用,即使一个或多个值 、$x
、$y
或$z
包含空格。
或者,使用bash
数组:
args=( -x="$x" -y="$y" -z="$z" )
tool "${args[@]}"