bash:在函数内打印时有或没有换行?

bash:在函数内打印时有或没有换行?

我想说最安全的选择是打印结果而不换行,因为当命令通过管道传输到另一个不希望其输入以行分隔的命令时,您可能会遇到麻烦,如以下脚本:

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上面一样,那么换行符可能只是一个麻烦。但对于一般用途,请考虑诸如unameuptimedate和 之类的实用程序,基本上任何此类打印尾随换行符,这绝对是习惯。如果在命令行上运行的程序不打印尾随换行符,许多 shell 会在同一行上打印提示符,这看起来很难看(如下所示)。另外,例如命令替换会删除尾随换行符只是为了补偿这一点。

bash$ date -u | tr -d '\n' 
Sat 14 Nov 2020 03:48:19 PM UTCbash$ 

答案2

在某些情况下,首选尾随换行符:

  • 输出应该是人类可读。许多提示($PS1包含回车符)将覆盖命令输出的部分或全部最后一行,除非它以换行符结尾。
  • 输出是一个系列唱片,每行一个。解析换行符-终止行比解析换行符更容易 -分开使用标准 shell 工具(例如read.
  • 日志记录,理想情况下只是上述情况的一个特例。也就是说,除非您使用某种确实不适合人类使用的自定义格式。

相关内容