1

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

VAR="$( that command )" 

获取所有输出

我不想创建临时文件,这使它变得更加丑陋,

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

command   |   > $VAR
4

2 回答 2

2

只需使用 : VAR=$(complex command )complex command就像你在下一行写它一样写。

例如:如果你有

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 就会像在“第一级”一样读取内容。它的工作原理是在评估包含它的行之前先评估 $(...) 。

于 2013-08-23T11:27:05.683 回答
0

您可以按以下方式执行 for 循环(只是一个警告,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
于 2013-08-23T08:23:55.680 回答