シェルスクリプト:while文のリダイレクトはサブシェルで実行されますか
日頃Linuxを使用している者です。手元にSolaris環境がなく検証できないためSolaris使いの方にお伺いさせてください。
お聞かせいただきたいことは次の一点です。
Q. Solaris8,9,10 のBourneShellは従来どおり、while文でリダイレクトを使ったときは、サブシェルでまわりますか?
上記質問に至った簡単な経緯を申し上げます。
実は、Linuxの/bin/ash(BourneShell相当)スクリプトで while文でリダイレクトしたところ、ループ内の変数がwhileの外でも参照できました。本来BourneShellの場合、当ケースでのループはサブシェルで回るはずですよね。
最近のGNU BASHを始め、ASHもfor,whileのりダイレクトを使ったループもカレントシェルで動作するということでしょうか? そこで、SolarisのSHはどうなのかと思った次第です。以上宜しくお願いします。
p.s.
HP-UX, AIXのSHについても情報があればありがたいです。
参考までに、Linux上の実例を記します。
■test.ash
#!/bin/ash
n=0
while read line
do
i=`expr $i + 1`
echo "$i: $line"
done < $0
echo "total line= $i"
■実験してみる
> ./test.ash
1: #!/bin/ash
2:
3: i=0
4: while read line
5: do
6: i=`expr $i + 1`
7: echo "$i: $line"
8: done < $0
9: echo "total line= $i"
total line= 9 ← しっかりインクリメントされた変数見れてるし。最近の仕様?
お礼
お礼が遅れてすみません。 ありがとうございます。 助かりました。