echo -e 之间的区别“并回显 $”“

echo -e 之间的区别“并回显 $”“

使用有什么区别

echo -e "Hello\nWorld" 

echo $"Hello\nWorld" 

它们不是都输出:

Hello
World

答案1

echo -e并且echo $'...'两者相似之处在于它们都支持以下转义序列:

  \a     alert (bell)
  \b     backspace
  \e
  \E     an escape character
  \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)

它们确实有区别。除上述内容外,echo -e还支持:

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

相比之下,$'....'支持:

 \'     single quote
 \"     double quote
 \nnn   the eight-bit character whose value is the octal value nnn (one to three digits)
 \cx    a control-x character

请注意,两者之间的\c扩展是不兼容的:

$ echo -e  'start\n\cIstop'
start
$ echo  $'start\n\cIstop'
start
        stop

对于echo -e上述内容,\c禁止进一步输出,从而忽略Istop。相反,对于$'...'\cI被解释为制表符。

视觉上相似的形式:$"..."

和 相比$'...', 的功能$"..."则大不相同,它将使其所包含的字符串根据当前的语言环境进行翻译。

争议echo -e

echo -e并未得到 shell 的普遍支持,许多人认为该-e选项是一个设计错误。观察:

$ ls
-e  -n
$ echo *
$ printf "%s\n" *
-e
-n

如您所见,如果您要打印的内容echo以破折号开头,结果可能会出乎意料。除非您确定要打印的第一个字符串echo不以破折号开头,否则最好使用printf

由于这些原因,POSIX 标准总结

鼓励新的应用程序使用 printf 而不是 echo。

bash切特·雷米(Chet Ramey)在过去 22 年里一直坚持同意

[N] ew 代码应该使用 printf。

相关内容