Я написал сценарий оболочки, чтобы вычесть два значения с плавающей запятой, например, для. ниже приведены два значения:

debit_amount=7.853117806000353E7
credit_amount=3223649.619999993

val1=$(printf "%f", "$debit_amount")
val2=$(printf "%f", "$credit_amount")

echo " val1 = " $val1
echo " val2 = " $val2

final=`echo "$val1-$val2" |bc`

Выход :

 val1 =  78531178.060004,
 val2 =  3223649.620000,
(standard_in) 1: syntax error

Я получил вышеуказанную ошибку. Я попробовал ниже команды, а также

final=$(echo "$val1 - $val2"|bc)
echo "$(($val1-$val2))"
echo `expr $val1 - $val2`

Однако я все еще получаю синтаксическую ошибку. Я что-то пропустил?

1 ответ1

1

Удалите запятые в вызовах printf :

val1=$(printf "%f" "$debit_amount")
val2=$(printf "%f" "$credit_amount")

Не нужно разделять аргументы запятыми. Вот почему вход для bc выглядел так:

78531178.060004,-3223649.620000,

который bc не может интерпретировать.


Кстати: вы не должны больше использовать обратные галочки (`):

final="$(echo "$val1 - $val2" | bc)"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .