\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'
这非常方便但不幸的是不可移植。