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

29

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

输入:

echo '1+1' | bc -l

输出:

2

尝试:

(没有成功)

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

可能是如何将BASH变量设置为命令输出的结果?的重复问题。 - Jahid
1个回答

58
你正在寻找被称为命令替换的shell功能。
有两种形式的命令替换:
1. 原始形式,回到石器时代,但是完全可移植并在所有类Unix shell(几乎所有)中都可用。
你将生成值的命令封装在反引号字符内,即:
$ a=`echo 1+1 | bc -l`
$ echo $a
2
$
  • 现代化、外观更简洁、容易嵌套的命令替换方式为$( cmd ),即:

    $ a=$(echo 1+1 |  bc -l)
    $ echo $a
    2
    $
    
  • 你的“she-bang”行是#!/bin/sh,所以如果你在真正的Unix平台上运行,那么你的/bin/sh很可能是最初的Bourne shell,并且需要使用上面的选项1。

    如果你尝试使用选项2,同时仍然使用#!/bin/sh并且它能工作,那么你有现代shell。尝试输入echo ${.sh.version}/bin/sh -c --version,看看是否有有用的信息。如果你得到一个版本号,那么你需要学习一下新版shell所包含的额外功能。

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

    a=$(( 1+1 ))
    

    如果你要进行更多的数学运算,那么所有的内容都将保留在作用域内,你可以使用shell特性中的算术运算符,例如:

    或者如果你正在做更多的数学运算,那么所有的内容都将保留在作用域内,你可以使用 shell 特性中的算术运算符,如下例:

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

    无论哪种情况,您都可以避免额外的进程创建,但是您无法在shell中进行浮点运算(而您可以使用 bc 进行浮点运算)。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接