有理由引用退出状态 $ 吗?多变的?

有理由引用退出状态 $ 吗?多变的?

我正在查看 Google 的 bash 脚本风格指南,发现他们引用了退出状态变量$? 这里

if [[ "$?" -ne 0 ]]; then
    error_message
fi

我认为返回值总是数字,那么有什么理由引用它们呢?

这只是一个好习惯吗(因为你想引用其他特殊的 shell 变量,如“$@”)?

答案1

强烈推荐

你应该读一下这个精彩的答案更多细节。


设置IFS包含数字可能会破坏您的代码:

$ IFS=0
$ echo test
$ [ $? -eq 0 ] && echo done
bash: [: : integer expression expected

有些 shell 可能IFS从环境继承(dash, ash),有些则不然(bash, zsh, ksh)。但是有人可以控制环境,你的脚本无论如何都会中断($#$!也会受到影响)。

请注意,在您的示例中,您使用了 new test [[...]],因此字段拆分已关闭,在这种情况下您不需要引用。如果你使用旧的测试,那就很重要了[...]

$ IFS=0
$ echo test
$ [[ $? -eq 0 ]] && echo done
done

答案2

从技术上讲,你不需要引用 中的左侧[[ ... ]]。但作为斯蒂芬·查泽拉斯放在他的评论里美丽的答案,没有令人信服的理由不引用它,所以只要这样做,晚上就能睡得更好。这是一个很好的推荐做法,可以减少疑虑和问题。

在旧式的[ ... ]必须引用,你别无选择。无论如何,您不应该[ ... ]再使用旧样式,新样式[[ ... ]]是推荐的方式。

相关内容