3つの追加変数を生成する変数配列に対してループを実行しています。
つまり
for foo in ${bar[@]};
do bar1=$(echo $foo | awk '{print$1}');
bar2=$(echo $foo | awk '{print$2}');
bar3=$(echo $foo | awk '{print$3}');
done
ただし、ループが完了すると、新しく作成された3つの変数が配列自体である必要があり、forループを実行することもできます。
つまり
for foo in ${bar1[@]}
do echo $foo
done
^^^^複数行を表示する必要があります。
誰でもこれを達成する方法を提案できますか?
答え1
使用
bar1+=($(echo $foo | awk '{print$1}'))
つまり、配列に値を追加します。もちろんコードはvariable+=( value )
使用配列bar1
は次のようになります。
for foo in "${bar1[@]}"
do
echo "$foo"
done
もちろん、妥当な理由がない限り、常にシェル変数(たとえば、"$foo"
および)を引用する必要があります。"${bar1[@]}"
確かにあなたは何をしているのか知っています。
答え2
これには3つのパイプは必要ありません。read
文字列から抽出する最初の3つのフィールドだけが必要です。
for foo in "${bar[@]}"; do
read bar1 bar2 bar3 the_rest <<< "$foo"
done
the_rest
foo
これは、「abc d」のようなものが可能で、それをに設定したくない場合にのみbar3
必要ですc d
。