![如何评估“if”语句中的算术表达式?](https://linux22.com/image/965937/%E5%A6%82%E4%BD%95%E8%AF%84%E4%BC%B0%E2%80%9Cif%E2%80%9D%E8%AF%AD%E5%8F%A5%E4%B8%AD%E7%9A%84%E7%AE%97%E6%9C%AF%E8%A1%A8%E8%BE%BE%E5%BC%8F%EF%BC%9F.png)
这是我的脚本:
#!/bin/bash
num=1
while [ $num -lt 100 ]
do
if [ $num % 3 -eq "0" ]
then
echo "fizz"
elif [ $num % 5 -eq "0" ]
then
echo "buzz"
elif [ $num % 3 -eq "0" ] && [ $num % 5 -eq "0" ]
then
echo "fizzbuzz"
else
echo $num
fi
((num++))
done
它不断地说bash: [: too many arguments
。
答案1
正确的语法是:
if [ $(($num % 3)) -eq "0" ]
从man bash
:
算术扩展
算术扩展允许计算算术表达式并替换结果。算术扩展的格式为:
$((expression))
$num % 3
在使用 进行比较之前,必须先对表达式进行求值-eq
。
答案2
为了扩展 Eric 的回答,如果您只是测试相对于 0 的相等性,您实际上可以放弃方括号。您还可以省略“$”,因为参数取消引用是可选的。对于他示例中的语句,
if [ $(($num % 3)) -eq "0" ]
相当于
if ! ((num % 3))
确保添加“!”运算符。