如何将多行输出从管道传递给bash中的变量?不使用临时文件

时间:2013-08-23 08:16:55

标签: bash pipe

我有一个复杂的grep / awk / etc命令行,它使用了一些“$ $ var,这使得它甚至无法使用

VAR="$( that command )" 

获取所有输出

我不想创建临时文件,这使得它甚至难看,

是否可以将管道输出传递给bash中的变量

command   |   > $VAR

2 个答案:

答案 0 :(得分:2)

只需使用:VAR=$(complex command ),就像在下一行写下complex command一样。{/ p>

例如:如果你有

foo=1
bar="2 3"
awk -v myfoo="$foo" -v mybar="$bar" '..... complex 
                                          awk 
                                          script here .....'

你可以把它放到VAR中:

foo=1
bar="2 3"
VAR="$( awk -v myfoo="$foo" -v mybar="$bar" '..... complex 
                                                   awk 
                                                   script here .....' )"

即,一旦进入$(...),bash就会把事情看作是“第一级”。它的工作原理是在评估包含它的行之前首先计算$(...)。

答案 1 :(得分:0)

你可以按照以下方式执行for循环(只是一个警告,对于按空格循环拆分输出。所以你会通过迭代得到一个单词):

    #!/usr/bin/ksh

    for RC_OUTPUT in $(./testEcho.ksh)
    do
        echo $RC_OUTPUT
    done

这是一个更复杂的解决方案(最大行数= 80):         #!的/ usr / bin中/ KSH

    LINE_LENGTH_MAX=80
    LINE_LENGTH=0

    for RC_OUTPUT in $(./testEcho.ksh)
    do
        CURRENT_LENGTH="$(expr length $RC_OUTPUT)" 
        (( LINE_LENGTH = LINE_LENGTH + CURRENT_LENGTH + 1 ))
        if [[ $LINE_LENGTH -gt $LINE_LENGTH_MAX ]]
        then
            LINE_LENGTH=$CURRENT_LENGTH
            echo $RC_OUTPUT
        else
            echo -n "$RC_OUTPUT "
        fi
    done