28

2 つの列に情報を含むファイルがあります。

box1 a1
box2 a2

このファイルを 1 行ずつ読み込んで、read各行の項目を変数に入れようとしています。

最初のパスでは、$aが含まれbox1$bが含まれますa1

2 番目のパスで$aは、 などbox2$b含みます。a2

私が達成しようとしているコードの例は次のとおりです。

for i in text.txt; do
    while read line; do
        echo $line | read a b;
    done < text.txt;
    echo $a $b;
done

これにより、次の結果が得られます。

box1 a1 box2 a2

次の結果を期待したとき:

box1 a1
box2 a1

どうすればこれを修正できますか?

4

2 に答える 2

67

コマンドにパイプするreadと、変数がサブシェルに設定され、コードの残りの部分から変数にアクセスできなくなります (実際、それらはなくなります)。ただし、この場合、forループや 2 番目のreadコマンドは必要ありません。

while read -r a b; do
    echo "$a" "$b"
done < text.txt
于 2013-03-15T21:20:50.890 に答える