我已经破解了许多shell脚本,有时最简单的事情使我感到困惑。今天,我遇到了一个脚本,该脚本大量使用了:
内置的(冒号)bash。
该documenation似乎很简单:
: (a colon) : [arguments]
除了扩展参数和执行重定向之外,什么也不要做。返回状态为零。
但是,我以前仅在用于shell扩展的演示中看到过这种用法。我遇到的脚本中的用例广泛使用了此结构:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
实际上有几百个抱怨,但更多的是相同的。除了上面的简单结构之外,没有输入/输出重定向。稍后在脚本中不检查返回值。
我将其视为无用的构造体,上面写着“或者什么也不做”。以“或什么都不做”来结束这些抱怨有什么目的?在什么情况下,这种构造会导致与简单地|| :
从所有实例中删除结果不同的结果?
:
替代true
。也许errexit
已经设置好了,作者并不关心某些命令的退出状态。