$ a=1 $ ls|while read LINE > do > a=2 > done $ echo $a 1
と、ループの中で変数 a の値を変更してもループの外の変数 a の値は変わらない。
forやwhile文などのリダイレクト処理はカレントシェルではなく、 サブシェルで実行される
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/node58.html
かららしい。
$ a=1 $ for i in `ls` > do > a=2 > done $ echo $a 2
と書き換えると、ループの中で変数 a の値を変更するとループの外の変数 a の値が変わる。