Я использую команду bc в UNIX для анализа некоторых математических выражений. У меня есть две маленькие функции:bash: оценка команды bc *
function bashcalc {
echo [email protected] | bc -l
}
function2 {
...
catMinusMouse=$(bashcalc "$cat_angle - $mouse_angle")
cos=$(cosine $catMinusMouse)
val=$(bashcalc "$cat_radius * $cos") ##PARSE ERROR
...
}
Когда я попытался запустить выражение следующий Валу, я получил немало «(standard_in) 1: Ошибка синтаксического анализа» с.
Моя первая мысль заключалась в том, что звездочка была проблемой, поэтому я попытался убежать от нее. Это, однако, дало мне незаконную ошибку.
Решения закончилось тем, что удаление всех пробельного
val=$(bashcalc "$cat_radius*$cos")
ВОПРОСА: Почему расчет catMinusMouse (с пробелами вокруг оператора вычитания) работать в то время как в том же формат с умножением не работает?
Попробуйте запустить 'echo 2 * 3' в непустом каталоге и посмотреть, можете ли вы это понять. – Mat
Это интересно. Однако могу ли я сделать эту работу с помощью экранирования? Если я делаю '$ (bashcalc $ cat_radius \ * $ cos)', не мог бы я эффективно называть 'echo 2 \ * 2', который правильно экранирует * и не перечисляет каталог? – bobbyjoe93
Проблема не на сайте вызова, она находится в расширении функции '$ @' в функции. Ответ jm666 охватывает его. – Mat