答案 0 :(得分:0)
cat -e
将打印“不可打印的字符”,例如新行指示符
$
表示存在\n
字符EOL
(行尾)。
当您退出流时,如果最后没有换行符(您的%
的效果),tr -d '\n'
字符会出现在某些shell环境中。它在技术上不是输出的一部分,而是在将输出呈现给终端后插入的指示符。
即,您可以通过tr:
将其从显示的输出中剥离出来$
$ echo "hello\nhello" | cat -e | tr -d '$'
hello
hello
但你不能通过做同样的事情从显示的输出中删除%:
$ echo "hello\nhello" | tr -d '\n' | cat -e | tr -d '%'
hellohello%
答案 1 :(得分:0)
$
和%
是约定使用的默认提示符号。它们出现在提示的末尾。您的输出最后没有换行符,因此提示符出现在行尾。
$
表示从Bourne-shell派生的shell,包括POSIX,Korn和Bash shell。登录时,这些shell使用#
,用户ID为零(通常为root)。
%
表示从c-shell派生的shell,包括csh和tcsh。
所以你可能在c-shell下运行,然后你正在运行POSIX或Bourne-shell脚本(你的#!
行显示sh
),所以bash
标记具有误导性。 可能因为您可以将提示符PS1
设置为您喜欢的任何内容,从而覆盖上述约定。
要查看您正在运行的shell,只需输入ps | grep $$
我在$
中显示的输出中没有看到任何man cat
个符号:
-e显示非打印字符(请参阅-v选项),并在每行末尾显示美元符号(“$”)。