如何将此结果分配给shell变量?
输入:
echo '1+1' | bc -l
输出:
2
尝试:
(没用)
#!bin/sh
a=echo '1+1' | bc -l
echo $a
答案 0 :(得分:40)
您正在寻找名为command-substitution的shell功能。
有两种形式的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 shell,并且需要你使用上面的选项1.
如果您在使用#!/bin/sh
时尝试选项2并且它有效,那么您将拥有现代shell。尝试输入echo ${.sh.version}
或/bin/sh -c --version
,看看您是否获得了有用的信息。如果您获得版本号,那么您将需要了解新shell包含的额外功能。
说到更新的功能,如果您真的使用bash,zsh,ksh93 +,那么您可以将示例代码重写为
a=$(( 1+1 ))
或者,如果您正在进行更多的数学运算,那将全部保留在范围内,您可以使用shell特征算法,如:
(( b=1+1 ))
echo $b
2
在任何一种情况下,都可以避免额外的进程创建,但是你不能在shell中进行浮点运算(而你可以使用bc
)。