4

Допустим, у меня есть команда с именем foo которая при вызове выводит число на экран:

$ foo
3

Скажем также, у меня есть другая команда с именем bar которая при вызове выводит на экран еще одно число:

$ bar
5

Я ищу написать сценарий оболочки, который будет арифметически складывать вместе вывод foo и bar (3+5 = 8). Как бы я это сделал? (Выходные данные команд не известны заранее. Просто так случилось, что им было 3 и 5 в последний раз, когда их запускали. Они могли быть чем-то другим.)

3 ответа3

8

Используйте let BASH для evalutate arithmetric выражения.

#!/bin/bash
a=`echo 3`
b=`echo 5`

let c=$a+$b
echo $c

Просто замените вызовы echo вызовами вашей программы.

3

Альтернативой let является использование синтаксиса с двойными скобками:

(( c = $(foo) + $(bar) ))

или же

echo $(( $(foo) + $(bar) ))

или используя переменные, вы можете опустить знак доллара в правой части равенства:

(( c += $(foo) + num ))

(который также иллюстрирует добавочное назначение)

Если вы используете нецелые числа, вы можете использовать bc:

echo "$(foo) + $(bar)" | bc

или же

c=$(echo "$(foo) + $(bar)" | bc)

Одним из преимуществ использования двойных скобок является то, что вы можете поместить пробелы вокруг операндов и операторов, чтобы сделать вещи более читабельными:

(( c = ( a + b ) * ( i - j ) ))
1

Баш:

bc < <({ foo ; echo + ; bar ; } | tr '\n' ' ' ; echo)

Если выходные данные только целые числа:

$(( $(foo) + $(bar) ))

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