如何将输出分配给shell脚本变量?

时间:2013-04-18 00:02:58

标签: shell pipe bc

如何将此结果分配给shell变量?

输入:

echo '1+1' | bc -l

输出:

2

尝试

(没用)

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

1 个答案:

答案 0 :(得分:40)

您正在寻找名为command-substitution的shell功能。

有两种形式的cmd替换

  1. 原创,回到石器时代,但完全便携,可用于所有类似Unix的外壳(几乎所有)。

    将值生成命令包含在反向标记字符中,即

    $ a=`echo 1+1 | bc -l`
    $ echo $a
    2
    $
    
  2. $( cmd )提供的现代,不那么笨重,容易嵌套的cmd替换,即

    $ a=$(echo 1+1 |  bc -l)
    $ echo $a
    2
    $
    
  3. 你的'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)。