bash 和算术比较:是否使用双引号?

bash 和算术比较:是否使用双引号?

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

[ "$VAR" -eq "1" ]
[ $VAR -eq "1" ]
[ "$VAR" -eq 1 ]
[ $VAR -eq 1 ]

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

谢谢 !

答案1

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

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

[ -eq 1 ]

这是语法错误。1但是引用并没有什么好处。

(另见Bash 条件表达式(带有 的东西[[ ... ]]),测试命令的更“现代”版本,具有更少的怪癖。)

答案2

如果要进行算术比较,请使用算术条件构造(记录这里):

(( VAR == 1 ))

相关内容