• ベストアンサー
  • 暇なときにでも

シェルスクリプト:while文のリダイレクトはサブシェルで実行されますか

  • 質問No.3175140
  • 閲覧数1456
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 80% (8/10)

日頃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 ← しっかりインクリメントされた変数見れてるし。最近の仕様?

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 48% (4454/9220)

Solarisの環境は無いのでわかりませんが、
http://www.nurs.or.jp/~asada/FAQ/UNIX/section3.8.html
Posix準拠のshだとカレントシェルでの実行のようです。
お礼コメント
lunarosa

お礼率 80% (8/10)

notnotさん

ご回答ありがとうございます。上記 URL 参考になりました。
また、御礼が遅れて申し訳ありませんでした(ここ最近は Solaris10 に触れる機会があり、暫く Solaris にどっぷりつかっており当ページにアクセスしておりませんでした)。

因みに、Solaris の sh は純粋に BourneShell でした。当質問のケースでは、サブシェルで回っているようです。
Linux-Solaris 間で sh による汎用性のあるコードを書く場合、このような細かい部分に注意する必要がありそうですね。

まずは、ありがとうございました。
投稿日時:2007/08/31 09:41
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ