3

プログラムの出力を検証する必要があります。出力には、簡単にアクセスできるように個別の変数に保存したい正確に 3 行が含まれていることがわかっています。次のいくつかのバリエーションを試しましたが、成功しませんでした。

IFS=$'\n' read line1 line2 line3 <<< $(grep pattern file.log)
IFS='' read line1 line2 line3 <<< $(grep pattern file.log)

組み合わせreadて、<<<私がやりたいことをすることは可能ですか?どのように?

不可能である場合、その説明は何ですか?どのような代替案を提案しますか?

ありがとうございました。

4

5 に答える 5

5
{
    read line1
    read line2
    read line3
} < <(grep pattern file.log) 

コマンド置換 ( $()) をヒアストリング ( ) の後に置くのは、一度に複数行を読み取ら<<<せようとするのと同様に、不必要なゆがみだと思います。readこれはread、複合コマンド内の複数の が自然な解決策である場合です。

于 2013-07-10T18:29:16.597 に答える
1

に設定IFSして\nに渡し-d ''ますread。また、ヒア文字列の代わりにプロセス置換を使用することもできます

while IFS=$'\n' read -d'' -r line1 line2 line3; do :; done < <(grep pattern file.log)
于 2013-07-10T18:15:22.730 に答える
0
while read -r arry[x]; do 
    ((x++)); 
done < <(grep pattern file.log)

これにより、という配列が作成されarry、3 行が 0 から始まる各インデックスに属します。

于 2013-07-10T18:33:04.450 に答える
0

配列を使用する

read -a array < <(grep pattern file.log)
# Optional
line1=${array[0]}
line2=${array[1]}
line3=${array[2]}

ただし、小次郎の答えをお勧めします。

于 2013-07-10T18:31:20.947 に答える