放弃在Shell脚本中使用echo命令
摘要: echo对指令的解析没有严格的标准,不同发行版下的echo的行为可能不同,这给脚本的执行带来了变数。为了增强脚本的普适性,我们应该尽量用printf代替echo。
问题描述
echo有多个实现版本,不同的shell程序自带的echo可能不同,不同的操作系统甚至同一操作系统的不同版本所携带的echo也可能不同。这些echo在解释转义字符串时的行为并不一致。
以作者所用的服务器(Linux VM-0-6-ubuntu 5.4.0-72-generic #80-Ubuntu SMP Mon Apr 12 17:35:00 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
)为例。对于如下的脚本:
|
|
如果使用bash解释,输出结果如下:
|
|
如果使用sh解释,输入结果如下:
|
|
显然,sh版本的echo并没有实现-e
和-E
选项。
解决方案
如果追求脚本的可迁移性,使用printf
代替echo
是一个明智的选择。printf
的表现在各个平台上具有一致性,不存在兼容问题。
- 原文作者:Azlith
- 原文链接:https://blog.azlith.com/archives/14/262/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。