Как назначить вывод переменной шеллскрипта?
Как присвоить этот результат переменной оболочки?
Входные данные:
echo '1+1' | bc -l
Выход:
2
Попытки:
(не работал)
#!bin/sh
a=echo '1+1' | bc -l
echo $a
1 ответ
Вы ищете функцию оболочки под названием команда-замена.
Есть 2 формы замены CMD
Оригинальный, возвращающийся к каменному веку, но полностью портативный и доступный во всех Unix-подобных оболочках (ну почти во всех).
Вы заключаете свои команды, генерирующие значения, в символы обратной галочки, т.е.
$ a=`echo 1+1 | bc -l` $ echo $a 2 $
Современная, неуклюжая, легко встраиваемая cmd-замена, поставляемая с
$( cmd )
т.е.$ a=$(echo 1+1 | bc -l) $ echo $a 2 $
Ваша линия "она взрыва" говорит, #!/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
).