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

时间:2009-10-23 14:57:45

标签: bash shell printf busybox

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

g=$(/bin/printf ${i})

${i}包含-6之类的内容时,printf认为其传递了一个选项。它无法识别该选项,因此会产生错误。

如果在引号中包裹${i}printf仍然认为它被传递了一个选项。

g=$(/bin/printf "${i}")

如果我转义引号,变量$g则保留“-6”,这不是我想要的。

g=$(/bin/printf \"${i}\") 

离开破折号( - )是否存在。

printf是一个BusyBox应用程序

4 个答案:

答案 0 :(得分:13)

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

$ printf -- -6
-6

答案 1 :(得分:7)

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

$ printf "%d\n" -6
-6
$ /sbin/busybox printf "%d\n" -6
-6
$

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

答案 2 :(得分:0)

你应该使用

printf -- -6

答案 3 :(得分:0)

如果以这种方式提供非数字参数,则会收到错误消息:

$ busybox printf "%d" "a"
a: conversion error
-1

但您可以使用%s,它可以用于数字和非数字参数(只要您不需要进行任何格式化):

$ busybox printf "%s" "a"
a
$ busybox printf "%s" -6
-6

如果您没有使用printf的格式化功能,并且需要输出没有换行符的值,则busybox的echo命令支持-n

$ busybox echo -n "a"
a
$ busybox echo -n -6
-6