“echo || true”的作用是什么?

9
为什么有人想要像 echo "something" || true 这样的代码?我在 Ubuntu 14.04 的 /lib/lsb/init-functions 的第92行找到这样的用法:echo "$pid" || true
我知道 || 代表或。但我无法找到一种使 echo 产生除零以外的任何退出代码的方法。而且,即使它有退出码,谁会在意?
我的意思是,使用前缀 || true 确保退出代码始终为0。所以,如果双管道的左侧产生任何不同于0的东西,则 true 将被执行,并导致整个行产生0。
为什么要对简单的 echo 出口代码如此谨慎?是否有任何检查确保 /lib/lsb/init-functions 上的每个单行都成功完成的东西?

2
就我个人而言,我倾向于将其写成||:;稍微更短、更简洁、更少视觉干扰。 - Charles Duffy
1个回答

2

为什么要关注退出代码

我认为这是为了避免脚本因可能使用以下内容而退出:

set -e

在脚本开始时,否则会导致脚本退出的内容。


7
如果标准输出被重定向到不存在的目录或 /dev/full,例如被重定向到文件中,则 echo 可能会因为输入/输出错误而失败。请注意,此处不提供解释。 - Keith Thompson
2
@gniourf_gniourf: 我在考虑 echo ... > /no/such/dir/foo.txt,但如果脚本的输出被重定向那样,它就不会运行,并且 echo 命令将永远不会被执行。 - Keith Thompson
1
@anubhava - 说得好。在这种情况下没有set -e,但由于这是一个函数库,调用脚本使用了set -e,因此init-functions很有礼貌。 - Akira
1
@Akira,你说的无效重定向是什么意思?请注意,当你执行 echo 'lol' > /non/existent 时,echo 指令永远不会被执行。你会得到一个失败的返回代码,但这是由于 Bash 无法打开 /non/existent 进行重定向。 - gniourf_gniourf
2
@Akira,对于 >/dev/full 的情况,失败的不是重定向,而是重定向后的写入操作。1>&- 关闭操作会成功,但其后的 write() 操作将失败。 - Charles Duffy
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接