【问题标题】:"Piping" values into Bash variables将值“管道”到 Bash 变量中
【发布时间】:2012-03-01 16:44:07
【问题描述】:

我有一个 Python 脚本,它输出两个数字,如下所示:1.0 2.0(数字之间有一个空格,但它可以是 \t 或其他任何值。我想要一个 bash 变量来保存 1.0 , 和另一个变量来保存2.0。这可能吗?

在过去,我只将一个值“管道”到一个变量中,如下所示:

var=`python file.py` ;

但是现在,我有兴趣从 python 文件中保存两个值。从概念上讲,类似于:

var1,var2=`python file.py` ; 

有什么建议/帮助吗?

谢谢!

【问题讨论】:

    标签: bash variables piping


    【解决方案1】:

    你可以这样使用:

    read var1 var2 < <(python file.py)
    

    时髦的&lt;( ) 语法称为进程替换。

    【讨论】:

    • 这比我下面的 awk 废话好多了。
    • @Mat:效果非常好。谢谢!
    【解决方案2】:

    我用来分割字段的单行是

     ... | awk '{print $1}' | ... # or $2, $3, etc.
    

    所以你可以这样做

    var = `foo`
    var1 = `echo "$var" | awk '{print $1}'`
    var2 = `echo "$var" | awk '{print $2}'`
    

    编辑:在 $var 周围添加引号

    【讨论】:

      【解决方案3】:

      我想这里最有效和最优雅的方法是使用readarray 将值读入数组。当然,前提是您可以使用数组。你应该是,但你永远不知道。不过,这将要求分隔符是换行符。无论如何:

      readarray -t values &lt; &lt;(python file.py)

      将为python file.py 输出的每一行提供一个包含一个元素的数组,并删除尾随换行符。查看man bash 了解这个非常酷的内置的其他选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-15
        • 2018-03-20
        • 1970-01-01
        • 1970-01-01
        • 2021-08-31
        • 2015-07-12
        • 2022-11-04
        • 2011-02-14
        相关资源
        最近更新 更多