在 printf 中使用破折号

在 printf 中使用破折号

如何在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[@]}"

相关内容