【问题标题】:How to assign an output to a shellscript variable?如何将输出分配给 shell 脚本变量?
【发布时间】:2013-04-10 22:36:38
【问题描述】:

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

输入:

echo '1+1' | bc -l

输出:

2

尝试

(没用)

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

【问题讨论】:

标签: shell pipe bc


【解决方案1】:

您正在寻找称为命令替换的 shell 功能。

cmd 替换有 2 种形式

  1. 原始,回到石器时代,但完全可移植,可用于所有类 Unix shell(几乎所有)。

    您将生成值的命令包含在反引号字符中,即

    $ 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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2018-03-12
    • 1970-01-01
    • 2011-12-14
    • 2017-07-21
    • 1970-01-01
    相关资源
    最近更新 更多