4.5: синтаксическая ошибка: неверный арифметический оператор (маркер ошибки ".5") - но код все еще работает, почему?
Мой калькулятор генерирует ошибку, упомянутую в заголовке, когда я пытаюсь использовать оператор "/", а также цифры 4.5 и 2.
Это (точно так же, как состояния ошибки), скорее всего, из-за того, что после десятичной точки в 4.5, но я не знаю, как я мог это исправить и почему сценарий действительно может дать мне правильный результат впоследствии.
Любая помощь приветствуется!
Код:
#!/bin/bash
read -p "Operator: " operator
read -p "First number: " ch1
read -p "Second number: " ch2
case $operator in
"+") echo "scale=2; $ch1+$ch2" | bc -l;;
"/") if [[ $ch1 -eq 0 || $ch2 -eq 0 ]]
then
echo "Nope..."
else
echo "scale=2; $ch1/$ch2" | bc -l
fi
;;
esac
Полный вывод:
./script2.sh: line 9: [[: 4.5: syntax error: invalid arithmetic operator (error token is ".5")
2.25
1 ответ
Несмотря на получение результатов с плавающей запятой, bash не поддерживает аргументы другого типа, кроме целых чисел, поэтому вам нужно скорее вызывать внешние инструменты, такие как bc
для вашей математики или придерживаться только целых чисел.
См. Bash docs, раздел "6.5. Арифметика оболочки":
Оболочка позволяет вычислять арифметические выражения как одно из расширений оболочки или с помощью составной команды ((, встроенного оператора let или опции -i встроенного объявления).
Оценка выполняется в целых числах фиксированной ширины без проверки на переполнение, хотя деление на 0 перехватывается и помечается как ошибка