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

输入:

echo '1+1' | bc -l

输出:

2

尝试

(没用)

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

===============>>#1 票数:41 已采纳

您正在寻找名为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 $ 

你的'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 )。

  ask by GarouDan translate from so

未解决问题?本站智能推荐: