Як передавати результати bc змінній


15

Я пишу сценарій і хочу передати результати з bcзмінної. Я оголосив 2 змінні ( var1і var2) і призначив їм значення. У своєму сценарії я хочу передати результати bcв іншу змінну, var3щоб я могла працювати з var3іншими розрахунками. Поки я міг записати результат у файл, який не є тим, що я шукаю, а також мені вдалося повторити результат у терміналі, але я просто хочу передати результат на змінну на даний момент, так що Я можу працювати з цією змінною.

echo "scale=2;$var1/var2" | bc

Відповіді:


23

Якщо ви використовуєте bash, краще використовувати рядок тут, а не трубу, як у:

bc <<< "scale=2;$var1/$var2"

Це дозволить заощадити передплату.

Потім, щоб зберегти вихід команди, використовуйте підстановку команди:

answer=$(bc <<< "scale=2;$var1/$var2")

Редагувати.

Якщо ви хочете чогось крутішого ніж bc, ось ось постійний струм (зворотний польський калькулятор):

answer=$(dc <<< "2k $var1 $var2/p")

1
Так, я використовую bash, можете пояснити, будь ласка, на передплаті? Чи є недолік?
шаолін

2
Кожен раз, коли ви використовуєте трубу, |команда праворуч від труби виконується в нижній частині корпусу, і для відкриття нової підзарядки потрібні ресурси (це як відкриття нового екземпляра bash для виконання цієї команди). Якщо ви можете уникнути цього, уникайте цього. Тут Piping a echoto bcзапустить команду bcв нижній частині і, в деякому сенсі, відстає (без образи), оскільки bash має чудову конструкцію тут-string, <<<щоб уникнути таких дурних речей.
gniourf_gniourf

@gniourf_gniourf Знову ж таки, якщо ви піклуєтесь про використання ресурсів, ви б використовували /bin/sh(тире) замість bash, але тире не має <<<.
Жил "ТАК - перестань бути злим"

Дякую за корисну інформацію !! Це хороша інформація, яку потрібно знати щодо збереження ресурсів та підрозділів. Я дуже вдячний за ваш внесок.
shaolin

1
@Gilles просто порівняйте time for i in {1..10000}; do : <<< ""; doneз time for i in {1..10000}; do echo "" | : ; done, ви побачите велика відмінність. Тоді ти маєш рацію, гередок трохи швидший за єресту. Але більш незручно набирати однолінійку.
gniourf_gniourf

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.