我想说最安全的选择是打印结果而不换行,因为当命令通过管道传输到另一个不希望其输入以行分隔的命令时,您可能会遇到麻烦,如以下脚本:
function test_nl {
echo result
}
function test_no_nl {
printf %s result
}
test_nl | xxd -p | wc -c
#prints 15
test_no_nl | xxd -p | wc -c
#prints 13
有没有 test_nl 方法更好的情况?
答案1
依靠。如果您总是查看确切的输出是什么,就像xxd
上面一样,那么换行符可能只是一个麻烦。但对于一般用途,请考虑诸如uname
、uptime
、date
和 之类的实用程序,基本上任何此类做打印尾随换行符,这绝对是习惯。如果在命令行上运行的程序不打印尾随换行符,许多 shell 会在同一行上打印提示符,这看起来很难看(如下所示)。另外,例如命令替换会删除尾随换行符只是为了补偿这一点。
bash$ date -u | tr -d '\n'
Sat 14 Nov 2020 03:48:19 PM UTCbash$
答案2
在某些情况下,首选尾随换行符:
- 输出应该是人类可读。许多提示(
$PS1
包含回车符)将覆盖命令输出的部分或全部最后一行,除非它以换行符结尾。 - 输出是一个系列唱片,每行一个。解析换行符-终止行比解析换行符更容易 -分开使用标准 shell 工具(例如
read
. - 日志记录,理想情况下只是上述情况的一个特例。也就是说,除非您使用某种确实不适合人类使用的自定义格式。