1

私は複雑な grep/awk/etc コマンドラインを持っていて、既にいくつかの " 一部の $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 に答える