サブシェル

Manpage of BASHを読んでいても、なかなか気づかなかった(汗)耄碌しすぎだ!

ls -la /home | read a b 
echo $a

としても、read a bがサブシェル(別のプロセス)で実行されているので、$aにはなにも代入されていない。(元の値があれば、それが残っている)

これを避けるには、パイプではなくて、ファイルを経由したリダイレクトを使うことができる

ls -la /home > /tmp/.$$
read a b < /tmp/.$$
echo $a

これは期待通りに動くようだ。