bash 和算术比较:双引号与否?

Mar*_*tin 8 bash comparison

在 bash 中比较两个整数时,我们是否必须加上双引号?在官方文档http://tldp.org/LDP/abs/html/comparison-ops.html 中,我可以看到每次都应该出现双引号......但以下示例有什么区别:

[ "$VAR" -eq "1" ]
[ $VAR -eq "1" ]
[ "$VAR" -eq 1 ]
[ $VAR -eq 1 ]
Run Code Online (Sandbox Code Playgroud)

我很好奇,看看 /etc/init.d 中的 Ubuntu init 脚本,里面有很多算术比较的用法,至少 [ "$VAR" -eq "1" ] 和 [ $VAR -eq 1 ] 被使用......但似乎没有人真正“知道”官方的做法是什么。

谢谢 !

Mat*_*Mat 4

$VAR如果它可能为空/未设置,您需要引用(因此您可能应该始终引用它)。

如果您不引用它并且它是空的,则该语句将导致:

[ -eq 1 ]
Run Code Online (Sandbox Code Playgroud)

这是一个语法错误。但引用1并没有获得任何好处。

(另请参阅bash 条件表达式(带有 的内容[[ ... ]]),这是测试命令的更“现代”版本,怪癖较少。)