-n
是否可以仅使用shellecho
中内置的命令来回显两个字符的字符串bash
?
我知道我可以这样做printf '%s\n' -n
,但只是想知道echo
内置是否能够输出字符串-n
。
答案1
使用-e
八进制 55 表示-
:
$ echo -e '\055n'
-n
...或八进制 156 n
,或八进制两者:
$ echo -e '\055\0156'
-n
如果这-e
让您烦恼,请设置 shell 选项xpg_echo
以echo
始终解释反斜杠序列(但这通常不是您想要的):
$ shopt -s xpg_echo
$ echo '-\0156'
-n
inecho
还bash
识别十六进制:
$ echo -e '\x2d\x6e'
-n
答案2
感谢所有的答案。我将添加我刚刚想到的一个:
echo -n -;echo n
答案3
在“ -n
”之前放置任意字符,并\b
在 mode 中使用“ ”转义序列-e
在最终输出中将其删除。下面的示例使用空格作为虚拟字符:
$ echo -e " \b-n"
-n
解释:
$ man echo
If -e is in effect, the following sequences are recognized:
\b backspace
这可以直观地将输出打印到终端:
$ echo -e " \b-n" | tee /tmp/test
-n
$ cat /tmp/test
-n
但是如果您需要解析输出,您可能会遇到问题,因为它确实会产生不可见的退格字符:
$ echo -e " \b-n" | wc -c
5
$ wc -c <<< $(echo -e " \b-n")
5
$ echo -e "--" | wc -c
3