POSIX(unix) 控制台中的 $ 和 % 符号

$ and % symbols in POSIX(unix) console

It's my bash script

When I run my script and cat -e output from this script.

% 和 $ 字符是什么意思?

cat -e 将打印 'unprintable characters' 例如换行符

$ 在这种情况下表示存在 \n 字符,它是 EOL(行尾)。

当您在末尾没有换行符的情况下退出流时,% 字符会出现在某些 shell 环境中(您的 tr -d '\n' 的影响)。从技术上讲,它不是输出的一部分,而是在输出呈现到终端后插入的指示器。

即,您可以通过 tr:

将显示输出中的 $ 管道返回

$ echo "hello\nhello" | cat -e | tr -d '$' hello hello

但是您不能通过执行相同的操作从显示的输出中删除 %:

$ echo "hello\nhello" | tr -d '\n' | cat -e | tr -d '%' hellohello%

$%是约定俗成的默认提示符号。它们出现在提示的末尾。你的输出最后没有换行符,所以提示出现在行尾。

$ 表示派生自 Bourne-shell 的 shell,其中包括 POSIX、Korn 和 Bash shells .这些 shell 在使用用户 ID 为零(通常是 root)登录时使用 #

%表示从c-shell导出的shell,包括csh和tcsh。

所以你是可能运行下c-shell,然后你是运行一个POSIX或者Bourne-shell 脚本(您的 #! 行显示 sh),因此 bash 标签具有误导性。 可能 因为您可以将提示变量 PS1 设置为您喜欢的任何内容,从而覆盖上述约定。

要查看您 运行 是哪个 shell,只需键入 ps | grep $$

我在你显示的输出中没有看到任何 $ 标志,摘自 man cat:

-e 显示非打印字符(见-v选项),并在每行末尾显示一个美元符号(`$')。