如何回显文字“-n”

如何回显文字“-n”

-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_echoecho始终解释反斜杠序列(但这通常不是您想要的):

$ shopt -s xpg_echo
$ echo '-\0156'
-n

inechobash识别十六进制:

$ 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

相关内容