在 if 条件下使用 bash 算术运算符时结果不正确


salary=(30000 45000 15000 40000)
average=37500
ans=0
for i in ${salary[@]}
do
if [ $((i<average)) ]
then
ans=$((ans+1))
fi
done
echo $ans

我正在使用 for 循环遍历工资数组,在 for 循环内部,有一个 if 条件。

数组中只有两个字段适合if [ $((i<average)) ]条件,30000 和 15000。

但它显示 4

预期输出为 2

算术计算的额外[..]是多余的。它的存在"强制"对算术计算结果进行字符串计算。$((..))中的"0"或"1"中的任何一个都被评估为[ -n 0 ][ -n 1 ],这始终为真。

所以只需单独使用算术运算符或使用[..]内部的算术比较器,即

if (( i < average )); then

if [ "$i" -lt "$average" ]; then

最新更新