\n 在终端上不起作用

\n 在终端上不起作用

\n不会被识别为“更改行”。它只会打印\n

我的终端是 gnome terminal 3.6.2。

我首先通过 echo 命令注意到了这一点,然后是通过 shell 脚本注意到了这一点。

关于它为何不起作用有什么建议吗?

答案1

默认情况下,Ubuntu 附带的标准 GNU 版本echo不识别转义序列。使用-e标志来启用此功能。

比较输出:

serg@ubuntu(bash):[/home/xieerqi]$ echo "new\nline"
new\nline
serg@ubuntu(bash):[/home/xieerqi]$ echo -e "new\nline"
new
line

一般情况下,echo不建议在脚本中使用。例如,mksh的版本echo允许解释转义。

为了脚本的可移植性,请使用该printf函数。

serg@ubuntu(bash):[/home/xieerqi]$ printf "new\nline\n"
new
line

答案2

Serg 的答案仅解决了打印换行符 ( echo, printf) 的问题。如果您需要在 shell 脚本中通常使用换行符,这里有一些建议,它们通过将换行符存储到变量中来演示换行符的使用$NL。当代码正常工作时echo "a${NL}b",将打印:

a
b

POSIX 兼容 sh

您可以使用文字换行符:

NL="
"

您可以使用命令替换来生成换行符printf

NLx="$(printf \\nx)" ; NL="${NLx%x}"

附加x并随后删除是必要的,因为命令替换会删除结果字符串末尾的所有换行符。

猛击

在 Bash 中,可以使用转义序列来表示$'和之间的字符串中的控制字符'

NL=$'\n'

这非常方便但不幸的是不可移植。

相关内容