与 printf 命令混淆?

与 printf 命令混淆?

我必须在一个打印命令中打印以下三行,而不使用 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是:

  1. 虽然许多语言都有printf语句/命令/函数,但它们都略有不同,因此请务必在特定语言的文档(C、bash、php、perl 等)中验证详细信息。

  2. 您永远不应在格式字符串中使用用户提供的信息。这始终是一个安全漏洞。如果您想显示用户提供的字符串,请使用类似 的格式字符串"%s"

  3. 反斜杠 ( \) 和百分号 ( %) 都是转义符,它们会改变后面字符的含义。如果您希望转义符出现在输出中,则必须对其进行转义或从其他参数中引入。美元符号 ( $) 不是 printf 所特有的,而是 shell 所特有的,因此请小心使用引号。

printf非常适合格式化数字。查看手册页了解详细信息

相关内容