为什么 echo -e 不解释新行?

为什么 echo -e 不解释新行?

在 bash 中,当我写下这一行时

new_line="new\nline"

我得到了预期的结果:

echo $new_line
new\nline

这也按预期工作:

echo -e $new_line 
new
line

正如手册中所述:-e enable interpretation of backslash escapes 但是,这并没有给我一个解释的\n换行符:

cur_log=$(who)
echo -e $cur_log
myuser pts/0 2017-01-19 07:10 (:0) myuser pts/1 2017-01-19 09:26 (:0) myuser pts/4 2017-01-19 09:14 (:0)

我认为没有换行符,但如果我写:

echo "$cur_log"

我得到了新行字符的解释。

myuser  pts/0        2017-01-19 07:10 (:0)
myuser  pts/1        2017-01-19 09:26 (:0)
myuser  pts/4        2017-01-19 09:14 (:0)

为什么不echo -e $cur_log解释换行符,但 `echo -e $new_line 却解释?

答案1

原因是在您的第一个变量 ( new_line) 中,只有一个转义序列(即\n=backslash后跟n),它被原封不动地传递给echo,而在第二个变量 ( cur_log) 中,有实际的换行符,这些换行符被作为 shell 的一部分而删除变量IFS

在 Unix/Linux 下,新行是一个字符ASCII码代码是10(换行)。当包含该字符的文件显示在屏幕上时,它会被转换为两个字符,回车加换行符 ( CR-LF)、10+ 13。当像这样的编辑器gedit打开这样的文件时,它会单独存储每一行​​。换行仅用于检测两个连续行之间的间隔。\n由两个字符组成,ASCII 92+ 110.如果您编辑包含这两个字符的文件,则该文件\n将保持不变并按原样显示,这与真正的换行符不同。

相关内容