如何将此结果分配给shell变量?
输入:
echo '1+1' | bc -l
输出:
2
尝试:
(没用)
#!bin/sh
a=echo '1+1' | bc -l
echo $a
您正在寻找称为命令替换的 shell 功能。
有 2 种形式的 cmd 替换
原始的,回到石器时代,但完全可移植,并且在所有类 Unix 的 shell(几乎所有)中都可用。
您将生成值的命令包含在反引号字符中,即
$ 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 shell,并且需要您使用上面的选项 1。
如果您在仍在使用的同时尝试选项 2#!/bin/sh
并且它可以工作,那么您就拥有了现代外壳。尝试输入echo ${.sh.version}
or/bin/sh -c --version
看看你是否得到任何有用的信息。如果您获得了版本号,那么您将想要了解较新的 shell 包含的额外功能。
说到新功能,如果你真的在使用 bash、zsh、ksh93+,那么你可以将你的示例代码重写为
a=$(( 1+1 ))
或者,如果您正在做更多的数学运算,这将全部留在范围内,您可以使用 shell 特征算术,例如:
(( b=1+1 ))
echo $b
2
在任何一种情况下,您都可以避免创建额外的进程,但您不能在 shell 中进行浮点运算(而您可以使用bc
)。