如何让$(/ bin/printf -6)返回-6并且不认为-6是一个选项

And*_*rew 4 bash shell printf busybox

我有一个bash shell脚本,其中包含以下行:

g=$(/bin/printf ${i})
Run Code Online (Sandbox Code Playgroud)

${i}包含类似的东西时-6,printf认为它被传递了一个选项.它无法识别该选项,因此会产生错误.

如果用${i}引号括起来,printf仍然认为它被传递了一个选项.

g=$(/bin/printf "${i}")
Run Code Online (Sandbox Code Playgroud)

如果我转义引号,变量$g则保持" -6",这不是我想要的.

g=$(/bin/printf \"${i}\") 
Run Code Online (Sandbox Code Playgroud)

有没有逃脱破折号( - ).

printf是一个BusyBox应用程序

Jac*_*oyd 13

大多数GNU程序支持使用--分隔符来告诉程序所有其他参数都不是选项.例如

$ printf -- -6
-6
Run Code Online (Sandbox Code Playgroud)


ndi*_*dim 7

如果printf使用实际格式字符串调用该怎么办?

$ printf "%d\n" -6
-6
$ /sbin/busybox printf "%d\n" -6
-6
$
Run Code Online (Sandbox Code Playgroud)

这显然适用于GNU coreutils和busybox'printf.