为什么 echo 命令在使用反斜杠转义“$”字符时不需要“-e”选项

为什么 echo 命令在使用反斜杠转义“$”字符时不需要“-e”选项

这是关于 bash 内置的echo。根据 Bash 文档,该-e选项可以解释反斜杠转义。
如果我执行 echo "Total Amount \$500",我会看到预期的输出 Total Amount $500。在这里,我可以使用反斜杠来转义“$”字符,而不使用该 -e选项。但是为了转义新行或制表符,我需要 在命令中有这样的 -e选项 - 。echoecho -e "Total Amount: \n \$500"

答案1

bash 手册对于echo与开关一起使用时说了以下内容-e

如果给出 -e 选项,则启用对以下反斜杠转义字符的解释。

它指定“下列反斜杠转义字符”,然后列出它们:

\a
alert (bell)

\b
backspace

\c
suppress further output

\e
\E
escape

\f
form feed

\n
new line

\r
carriage return

\t
horizontal tab

\v
vertical tab

\\
backslash

\0nnn
the eight-bit character whose value is the octal value nnn (zero to three octal digits)

\xHH
the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

\uHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)

\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)

这可能会令人困惑,因为它们实际上更像是( ),escape sequence而不是( )。escape characterescape character\

转义序列

转义序列是在字符或字符串文字中使用时不表示自身的字符序列,但会被转换为可能难以或不可能直接表示的另一个字符或字符序列。

转义字符

在计算和电信中,转义字符是对字符序列中的后续字符调用替代解释的字符。转义字符是元字符的特例。一般来说,判断某个东西是否是转义字符取决于上下文。

-e选项与转义字符关系不大,但允许将其与上述字符结合使用,sequences以便将它们解释为特殊含义。

答案2

字符串转换有两个步骤。

  1. 首先 bash 解析命令行echo -e "Total Amount: \n \$500"并确定它需要调用带有echo两个参数的命令。第一个参数是-e。第二个参数是扩展双引号文字的结果"Total Amount: \n \$500"。考虑到双引号字符串的规则,\$变为$\n保持\n,因此传递给echo命令的第二个参数是Total Amount: \n $500
  2. 在模式下,echo 命令-e会将一些以反斜杠开头的序列替换为单个字符,例如\n用换行符替换。

请注意,“转义”在您的问题中意味着两种不同的含义。第一步,\$“转义”中的反斜杠$意味着$字符逃脱特殊处理并保持完整。在第二步中,反斜杠\n“转义”正常处理以应用一些特殊处理,从而n产生换行符。

1反斜杠后跟其中之一"$\`就成为第二个字符;反斜杠后面跟随的任何其他内容都会保留。
²反斜杠后面跟一些小写字母成为控制字符;反斜杠后跟数字成为八进制中具有该代码点的字符;反斜杠后跟其中之一xuU和一些十六进制数字与 hexa 的作用相同;反斜杠后跟任何其他字符就成为第二个字符。

相关内容