上田です。 >> i といういかにもユーザが使いそうな変数を消されてしまうのが悩ましいです。 大里> たとえば、ユーザ名_ENV_i とか、サブシステム名_value_i などだった 大里> ら、いかにもユーザが使いそうな環境変数名ではありますが、 大里> for i in foo; do bar; done 大里> は、あまりにポピュラーな常套句なので、export i などとやばいこと 大里> をするユーザがいるとは、私には信じられませんけど。 うーん。どっちがヤバいかは、議論が分かれる気がします。 ポピュラーな常套句だけに、システムが勝手にそれを使って(変更して) 良いのかという気がするんです。 今回問題の発端となったのは、PBS(バッチジョブを投入するシステム) のqsub コマンドを使うスクリプトでした。 ========================= for i in 1 2 3 4 5; do for j in 1 2 3 4 5; do qsub -v i,j 変数iとjを使うバッチスクリプト done done ========================= qsub は -v 変数名 と書くと環境変数を中のバッチジョブに渡してくれるので すが(というかそれ以外に情報を渡す手段がない)、j はちゃんと伝わるのに、 i だけ伝わらないという非常に分かりにくいバグが出たのです。 どの変数名が伝わらなくてどの変数が伝わるのか、PBSの問題なのかrshの問題 なのか、なぜ変数 i なのか、かなり悩みました。 大里> この衝突を心配するなら、すべての環境変数をなくすか、シェル変数の 大里> 使用を一切禁止するかしかないという変な話になるので? ええと、変じゃないです。可能なら一切禁止したいです。 正確に言うと、 /etc/bashrc や /etc/profile のようにユーザが意識せずに 使う(使ってしまう)スクリプトでは、できるだけユーザの環境変数やシェル変 数を汚さないようにした方がよいと考えています。変ですか? ちなみに RedHat でも調べてみましたが、 $i 使ってますね。しかも unset しないから、/etc/profile.d/xxx.sh なんて値が入っている。 # これは、むしろ原因が分かりやすいけど汚いなぁ。 >> もしも次のバージョンでもbash2でなくbashを標準のshellとするなら、修正を >> 検討して頂けると嬉しいです。 大里> bash2 でも一緒じゃないですか? bash2 でも一緒でした。私の勘違いです。 --HAL ======================================================================== (株)富士通研究所 ITコア研究所 ITアーキテクチャ研究部 上田晴康 E-mail: hal_ueda@xxxxxxxxxxxxxx ========================================================================