是否有一个\ ESC或我可以放的东西,所以echo
命令可以解释它?
这些命令的列表在哪里,如\t\n\r
等?
答案 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
字符ESC
。 printf
比echo
便携得多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
。