2013-04-18 65 views
18

如何将此结果分配给shell变量?如何将输出分配给一个shellscript变量?

输入:

echo '1+1' | bc -l

输出:

2

尝试

(没有工作)

#!bin/sh 
a=echo '1+1' | bc -l 
echo $a 
+0

[如何设置BASH变量等于命令的输出?](http://stackoverflow.com/questions/4651437/how-to-set-a-bash-variable-equal-to - 从命令输出) – Jahid

回答

32

您正在寻找称为命令替换的shell功能。

有2种形式CMD替代

  1. 原件,回到石器时代,但完全可移植的,并适用于所有的类Unix外壳(以及几乎所有)。

    你附上你的价值产生背蜱字符的内部命令,即

    $ a=`echo 1+1 | bc -l` 
    $ echo $a 
    2 
    $ 
    
  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}/bin/sh -c --version并查看您是否收到任何有用的信息。如果你得到一个版本号,那么你会想知道新壳包含的额外功能。

说到的新功能,如果你真的使用bash,zsh中,ksh93的+,那么你可以重写你的示例代码

a=$((1+1)) 

或者,如果你正在做更多的数学运算,将全部留在里面范围,你可以像使用壳特征算术:

((b=1+1)) 
echo $b 
2 

在这两种情况下,你能避免额外的进程创建的,但你不能这样做浮点运算的壳(而你可以用bc)。

+0

很好的解释。 Thx非常。工作正常! – GarouDan

相关问题