Проблема здесь состоит в том, что вы пропустили echo
(или printf
или любая другая вещь), чтобы обеспечить данные для bc
:
$ echo "scale=5; 12/7" | bc
1.71428
Кроме того, как отметил cnicutar в комментариях, вы должны использовать $
для обозначения переменных. sum
- строка, $sum
- значение переменной sum
.
Все вместе, ваш фрагмент кода должен быть как:
sum=12
n=7
output=$(echo "scale=5;$sum/$n" | bc)
echo "$output"
Это возвращает 1.71428
.
В противном случае, с "scale=5;sum/n"|bc
вы просто обжигающе задание и делает bc
неудачу:
$ "scale=5;sum/n"|bc
bash: scale=5;sum/n: No such file or directory
Вы тогда говорите, что вы хотите, чтобы результат закруглены, что не происходит прямо сейчас:
$ sum=3345699
$ n=1000000
$ echo "scale=5;($sum/$n)" | bc
3.34569
Для этого нужен другой подход, поскольку bc
не круглый. Вы можете использовать printf
вместе с %.Xf
округлить до X
десятичных чисел, что и делает:
$ printf "%.5f" "$(echo "scale=10;$sum/$n" | bc)"
3.34570
Смотреть Я даю большой масштаб, так что тогда printf
имеет номера десятичные достаточно, чтобы округлить правильно.
'sum = 12; п = 7; Выход = $ (BC <<< "масштаб = 5; $ сумма/$ п"); echo $ output' – ymonad