在 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
将保持不变并按原样显示,这与真正的换行符不同。