我已经看到了关于bash整数检查和比较的其他答案,但是我得到的结果对我来说非常混乱。 假设我有这个脚本:
if [[ $1 -eq $1 ]] ;then
echo "number"
else
echo "not number"
fi
if (( $1 >= 0 )) ;then
echo "number"
else
echo "not number"
fi
如果我为参数1传递一个字符串,我会回到“数字”。
答案 0 :(得分:2)
那是因为字符串被理解为值为0的变量,0 >= 0
为真。尝试使用>
(但会将0报告为not number
- 但它已将所有负整数错误分类。)
比照:
a=1
b=a
x=b
(( x > 0 )) && echo 1
a=0
(( x > 0 )) || echo 0
甚至
$ a=x
$ x=a
$ (( x > 0 ))
bash: ((: a: expression recursion level exceeded (error token is "a")
Bash努力解决变量:
(
for l in a{1..1023} ; do
printf "$l\n$l="
done
echo 1
echo '((a1>0))'
) | tail -n+2 | bash