Неправильные результаты при использовании оператора bash arithmeti c в условии if - PullRequest
2 голосов
/ 27 мая 2020
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-l oop, внутри for-l oop есть условие if.

В массиве только два поля, которые подходит if [ $((i<average)) ] условие, 30000 и 15000.

Но он показывает 4

Ожидаемый результат - 2

1 Ответ

5 голосов
/ 27 мая 2020

Дополнительная [..] над арифметической c оценкой является избыточной. Его наличие "заставляет" строковое вычисление результата вычисления арифметики c. Любой из "0" или "1" из $((..)) оценивается как [ -n 0 ] и [ -n 1 ], что всегда верно.

Поэтому просто используйте только оператор arithmeti c или используйте arithmeti c компаратор внутри [..], т.е.

if (( i < average )); then

или

if [ "$i" -lt "$average" ]; then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...