Вы ищете функцию оболочки, называемую командной подстановкой.
Существует 2 формы замены cmd
Оригинал, вернувшийся к каменному возрасту, но полностью портативный и доступный во всех Unix-подобных оболочках (ну почти все).
Вы включаете команды генерирования значения внутри символов обратного тика, т.е.
$ a=`echo 1+1 | bc -l`
$ echo $a
2
$
Современная, менее неуклюжая, легко устанавливаемая cmd-подстановка, снабженная $( cmd ), т.е.
$ a=$(echo 1+1 | bc -l)
$ echo $a
2
$
В строке "she-bang" говорится: #!/bin/sh, поэтому, если вы работаете на реальной платформе Unix, скорее всего, ваш /bin/sh является исходной оболочкой Bourne и потребует, чтобы вы использовали опцию 1 выше.
Если вы попробуете вариант 2 при использовании #!/bin/sh, и он работает, тогда у вас есть современная оболочка. Попробуйте ввести echo ${.sh.version} или /bin/sh -c --version и посмотреть, есть ли у вас какая-либо полезная информация. Если вы получите номер версии, вам нужно узнать о дополнительных функциях, которые содержат более новые оболочки.
Говоря о новых функциях, если вы действительно используете bash, zsh, ksh93 +, тогда вы можете переписать свой пример кода как
a=$(( 1+1 ))
Или, если вы делаете больше математических операций, все это останется в пределах области действия, вы можете использовать арифметику с оболочкой, например:
(( b=1+1 ))
echo $b
2
В любом случае вы можете избежать создания дополнительного процесса, но вы не можете выполнять арифметику с плавающей запятой в оболочке (тогда как вы можете с bc).