在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 ))