先日作成を進めていたシェルスクリプトのWhile文で、変数に値が代入されていない事があったので、その備忘。 これは、Whileと他のコマンドを組み合わせた時に、その組み合わせ方に問題があるとサブシェルとして扱われてしまう事からくる問題だ。 たとえば、以下のように引数で読み込んだファイルの頭に行番号を追記するシェルスクリプトを記述したとする。 #!/bin/sh i=0 cat $1 | while read line; do i=`expr $i + 1` TEXT=$TEXT`echo $i`":$line\n"; done echo $TEXT で、実際にこのスクリプトを実行すると、以下のようになる。 /work/test$ cat test.txt testtest testtest1 testtest2 testtest3 /work/test$ sh test.sh test.t