我必须在一个打印命令中打印以下三行,而不使用 echo 命令。因此我选择了 printf 命令。以下是三行:
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
到目前为止我所做的是:
printf "
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
"
但是第三行‘,’出现了 bash 错误。
所以有人可以启发我吗?
答案1
%
是 中的特殊字符printf
。这就是导致错误的原因。您需要将其转义为%%
。
$
双引号内的 也可能被外壳替换,因此您应该将其转义 ( \$
)。通常使用单引号更容易。
答案2
更好的使用:
printf "Different characters can be represented and supported\n\
in the print command, for example:\n\
x-y, X+Y, –, +, <, >, %%, $, #, &.\n"
正如其他人在这里所说的那样,您会收到该错误,因为该%
字符很特殊并且必须进行转义。
看man 1 printf
了解更多信息。
答案3
对于 printf 来说,这%是特殊的:它是格式说明符中的前导字符。如果您想要文字百分比,请使用%%
答案4
printf
是格式化的打印,其第一个参数是格式字符串。其余参数用于格式字符串。使用时要记住的三件事printf
是:
虽然许多语言都有
printf
语句/命令/函数,但它们都略有不同,因此请务必在特定语言的文档(C、bash、php、perl 等)中验证详细信息。您永远不应在格式字符串中使用用户提供的信息。这始终是一个安全漏洞。如果您想显示用户提供的字符串,请使用类似 的格式字符串
"%s"
。反斜杠 (
\
) 和百分号 (%
) 都是转义符,它们会改变后面字符的含义。如果您希望转义符出现在输出中,则必须对其进行转义或从其他参数中引入。美元符号 ($
) 不是 printf 所特有的,而是 shell 所特有的,因此请小心使用引号。
printf
非常适合格式化数字。查看手册页了解详细信息