How to assign this result to a shell variable?
Input:
echo '1+1' | bc -l
Output:
2
Attempts:
(didn't work)
#!bin/sh
a=echo '1+1' | bc -l
echo $a
You're looking for the shell feature called command-substitution.
There are 2 forms of cmd substitution
Original, back to the stone-age, but completely portable and available in all Unix-like shells (well almost all).
You enclose your value generating commands inside of the back-ticks characters, i.e.
$ a=`echo 1+1 | bc -l`
$ echo $a
2
$
Modern, less clunky looking, easily nestable cmd-substitution supplied with $( cmd )
, i.e.
$ a=$(echo 1+1 | bc -l)
$ echo $a
2
$
Your 'she-bang' line says, #!/bin/sh
, so if you're running on a real Unix platform, then it's likely your /bin/sh
is the original Bourne shell, and will require that you use option 1 above.
If you try option 2 while still using #!/bin/sh
and it works, then you have modern shell. Try typing echo ${.sh.version}
or /bin/sh -c --version
and see if you get any useful information. If you get a version number, then you'll want to learn about the extra features that newer shells contain.
Speaking of newer features, if you are really using bash, zsh, ksh93+, then you can rewrite your sample code as
a=$(( 1+1 ))
Or if you're doing more math operations, that would all stay inside the scope, you can use shell feature arithmetic like:
(( b=1+1 ))
echo $b
2
In either case, you can avoid extra process creation, but you can't do floating point arithmetic in the shell (whereas you can with bc
).