【发布时间】:2013-04-10 22:36:38
【问题描述】:
如何将此结果分配给 shell 变量?
输入:
echo '1+1' | bc -l
输出:
2
尝试:
(没用)
#!bin/sh
a=echo '1+1' | bc -l
echo $a
【问题讨论】:
如何将此结果分配给 shell 变量?
输入:
echo '1+1' | bc -l
输出:
2
尝试:
(没用)
#!bin/sh
a=echo '1+1' | bc -l
echo $a
【问题讨论】:
您正在寻找称为命令替换的 shell 功能。
cmd 替换有 2 种形式
原始,回到石器时代,但完全可移植,可用于所有类 Unix shell(几乎所有)。
您将生成值的命令包含在反引号字符中,即
$ a=`echo 1+1 | bc -l`
$ echo $a
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)。
【讨论】: