4

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

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

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

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

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

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

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

有没有逃避破折号(-)。

printf 是一个 BusyBox 应用程序

4

4 回答 4

13

大多数 GNU 程序都支持使用--分隔符来告诉程序所有进一步的参数都不是选项。例如

$ printf -- -6
-6
于 2009-10-23T14:58:43.893 回答
7

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

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

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

于 2009-10-23T15:07:03.687 回答
0

你应该使用

printf -- -6
于 2009-10-23T15:00:08.930 回答
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
于 2009-10-23T18:18:32.833 回答