«前の日記(2009年3月13日(金)) 最新 次の日記(2009年4月7日(火))» 編集

徒然日記


2009年3月24日(火) [長年日記]

readコマンド

$ cat file | while read A B ; do
	echo $A
	echo $B
done

こんなsyntaxはよく使うと思うのだけど fileの中身が1行とか、コマンドの出力を変数に代入するばあいはwhileはずしても大丈夫だべ。と思って以下のようにした。

$ echo "hoge fuga" | read A B
$ echo $A
$ echo $B

これの結果は

hoge
fuga

になってほしかったのだが、bashでは空値(空行2行)になる。zshでは上述の出力になるので望んだとおり。

bashで正しく表示させるには

$ echo "hoge fuga" | (read A B ; echo $A ; echo $B)

とsub shellにするなりしてブロックしてやらないとダメ。

わけわからなくてウンウン悩みました…

本日のツッコミ(全1件) [ツッコミを入れる]
# kitaj (2009年3月25日(水) 01:30)

そりゃ別プロセスのbashでreadしてるんだから元のbashの$Aとかには反映されないよね.<br>むしろzshの方が変態なのかと.

./20090324.html#c">ツッコミを入れる]



«前の日記(2009年3月13日(金)) 最新 次の日記(2009年4月7日(火))»