与printf命令混淆?


13

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

所以有人会启发我的。


顺便说一下,print命令与printf命令之间是有区别的。
Flimm

Answers:


12

更好地使用:

printf "Different characters can be represented and supported\n\
in the print command, for example:\n\
x-y, X+Y, –, +, <, >, %%, $, #, &.\n"

就像其他人在这里所说的那样,您会收到该错误,因为该%字符很特殊,必须转义。

请参阅man 1 printf以获取更多信息。


@Narwen当您必须与特殊角色一起玩时,我一直建议您一直使用这个人。要搜索man,请键入/your_string_to_search,然后按Enter。
RaduRădeanu13年

4
重点printf在于该%角色及其作用!
卡兹(Kaz)

14

%是的特殊字符printf。这就是导致错误的原因。您需要将其转义为%%

$也可以在用双引号引起来时将其替换为外壳,因此应转义(\$)。通常使用单引号会更容易。


5
美元符号仅在其后跟有效变量名时才是特殊的,此处不是这种情况。
glenn jackman

1
$variable由外壳代替,而不是由代替printf。如果您使用单引号而不是双引号$将字符串引起来,则shell不会对其进行插值,而会将其直接传递给printf
Flimm

@glennjackman除了在后面加上有效的变量名(无论是否实际定义了变量)时$是特殊的,在后面加上{或带有特殊的参数符号一个或多个数字,也应是特殊的。但是,您所说的基本概念是正确的。
伊利亚·卡根

9

%是printf的特殊功能:它是格式说明符中的领先字符。如果要字面值百分比,请使用%%


9

看到不被允许使用该echo命令时,您选择使用该命令,实在令人惊讶printf

为什么不cat呢?

#!/bin/bash

cat<<'EOF'
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
EOF

但是我不得不根据问题用打印命令替换echo。但是,谢谢您的帮助。
Narwen 2013年

2
为避免像$foo在文本中那样解释字符串,请使用cat <<'EOF'代替cat <<EOF
Lekensteyn

4

printf是带格式的字符串作为其第一个参数的格式化打印。其余参数在格式字符串中使用。使用时要记住的三件事printf是:

  1. 尽管许多语言都有printf语句/命令/功能,但它们都有一些不同,因此请务必核实特定于语言的文档(C,bash,php,perl等)中的详细信息,

  2. 您永远不要在格式字符串中使用用户提供的信息。这始终是安全缺陷。如果要显示用户提供的字符串,请使用格式字符串"%s"

  3. 反斜杠(\)和百分号(%)都是转义字符,如果您希望在输出中显示转义字符,则它们会更改以下字符的含义,必须将其转义或从另一个参数中拉入。美元符号($)对于printf而言不是特殊的,但对于shell而言特殊的,因此请注意引号。

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


2

正如其他人提到的,该%符号是的特殊符号printf

如果您只想按原样打印一个字符串,请给printf %s作为第一个参数,并将字符串括在单引号中作为第二个参数:

printf %s '
Different characters can be represented and supported 
in the printf command, for example: 
x-y, X+Y, –, +, <, >, %, $, #, &.
'

使用单引号而不是双引号可以阻止外壳插入符号,例如$

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.