在阅读 bash 风格指南时,我发现了以下指南:
数学/整数运算
使用
((...))
和$((...))
。
a=5
b=4
# wrong
if [[ $a -gt $b ]]; then
...
fi
# right
if ((a > b)); then
...
fi
当我询问原因时,我被告知[[
测试可能会在尝试将数字与前导零进行比较时窒息。在我的测试中,我无法重现此问题。
我的问题
((a > b))
和之间实际上有功能差异[[ "$a" -gt "$b" ]]
吗?
不是我能看到的。
[[ val1 < val2 ]]
但是和之间有区别(( val1 < val2 ))
:前者是字符串比较。尽管在这两种情况下前导零仍然是一个问题:
那是因为它们标记八进制数,就像在 C 中一样。但是你可以通过在它们前面加上
10#
. (Bash 参考 6.5 Shell 算术)