如何让$(/ bin / printf -6)返回-6并且不认为-6是一个选项
题
我有一个bash shell脚本,其中包含以下行:
g=$(/bin/printf ${i})
当 $ {i}
包含类似 -6
的内容时, printf
认为它传递了一个选项。它无法识别该选项,因此会产生错误。
如果在引号中包装 $ {i}
, printf
仍然认为它被传递了一个选项。
g=$(/bin/printf "${i}")
如果我转义引号,变量 $ g
然后保持" -6
"这也不是我想要的。
g=$(/bin/printf \"${i}\")
离开破折号( - )是否存在。
printf是一个BusyBox应用程序
解决方案
如果您使用实际格式字符串调用 printf
会怎样?
$ printf "%d\n" -6
-6
$ /sbin/busybox printf "%d\n" -6
-6
$
这显然适用于GNU coreutils和busybox'printf。
其他提示
大多数GNU程序支持使用 -
作为分隔符来告诉程序所有其他参数都不是选项。例如
$ printf -- -6
-6
你应该使用
printf -- -6
如果以这种方式提供非数字参数,则会收到错误消息:
$ 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
不隶属于 StackOverflow