你如何写一个由echo解释的ESC字符?

时间:2014-07-18 19:22:26

标签: bash

是否有一个\ ESC或我可以放的东西,所以echo命令可以解释它?

这些命令的列表在哪里,如\t\n\r等?

2 个答案:

答案 0 :(得分:3)

如果你正在使用bash,最好使用那个shell所谓的"ANSI-C Quoting"。这使您可以构造一个可以传递给echo命令的字符串,只需打印它即可。

例如,要打印ASCII ESC字符:

echo $'\e'

echo -n $'\e'

如果您不想要尾随换行符。

(术语“ANSI-C引用有点用词不当有几个原因.C标准目前由ISO生成,而不是ANSI,bash功能支持\e\E代表Escape字符,而\cX代表control-X,功能不在标准C中。十六进制转义的处理也有点不同。)

更好的是,您可以使用printf命令,该命令也支持\e字符ESCprintfecho便携得多echo/bin/echo命令有许多不同版本,printf和大多数shell中的内置命令。 printf也存在于多个版本中,但跨实现的行为更加一致。使用echo的代码更有可能移植到除bash(或旧版本的bash)之外的shell,而不是依赖于bash echo命令或GNU的任何更神秘功能的代码。 coreutils {{1}}命令。

答案 1 :(得分:2)

是的,您可能必须通过-e开关:

echo -e '\n\t\a'

您可以在echo联机帮助页和info条目中找到已解释的转义列表。这适用于GNU coreutils echo,可能就是你正在使用的那个:

   If -e is in effect, the following sequences are recognized:

   \\     backslash

   \a     alert (BEL)

   \b     backspace

   \c     produce no further output

   \e     escape

   \f     form feed

   \n     new line

   \r     carriage return

   \t     horizontal tab

   \v     vertical tab

   \0NNN  byte with octal value NNN (1 to 3 digits)

   \xHH   byte with hexadecimal value HH (1 to 2 digits)

Bash会用自己的内置替换/bin/echo,但会解释上面的所有序列。

请注意,Posix合规性不需要此,因此一些shell将部分或不支持-e标志并转义,即Debian / Ubuntu Dash,这是默认的shell在那些平台上。您必须调用echo作为/bin/echo,以避免调用内置函数并确保/bin/echo可以处理转义。

如果您需要编写可移植代码,请使用printf