2013-04-18 102 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

相關問題