2011-07-06 9 views
1

私は、ファイルまたは標準入力からのデータ読み込みにbash組み込みのreadを使用しようとしています議論のうち、私がパイプすることができる限り)、それらを配列に格納する。これは時にはうまくいくこともありますが、なぜそうはわかりません。ここファイルまたは標準入力からの読み込みを使用して読み込み値を格納しない

は、テストケースである:

values=(1 2 3) 
echo "4 5 6" | read -a values; echo "${values[*]}" 

出力が "4 5 6" であるが、代わりにその "1 2 3" べきです。一方、次のように実行する場合:

values=(1 2 3) 
echo "4 5 6" | (read -a values; echo "${values[*]}") 

正しい出力が得られます。

アイデア?ここで

答えて

1

(質問が愚かだったことを考え出す後 - イグナシオのおかげで)私のソリューションです:

IFS="$(printf "\a")" read -ra values < <(some-command | tr '\n' '\a') 

問題はバッシュのプロセス置換(<()が)新しい行をストリップということです(パラメータ拡張についての何か?私はわかりません)ので、レコード区切り文字として"\n"を使用することはできません。だから代わりに、私はコマンド出力の改行文字を "可聴ベル"文字に変換し(これを使って出力を見つけることは期待していません)、それをレコード区切り文字として使用します。最後に、私はvalues要素のそれぞれに1行を取得します。

関連する問題