user12938074:
私はシェルスクリプトで再帰ループを試したが、私は、興味深い話題になってきました。
最初に私はの興味深い機能に出くわしました
for x in a b c d; do
for x in e f d h; do
a=test
done
echo $x
done
必ず、変数$ xとして文字hを出力します。これは内部ループの用途があまりにも変数名として、X、及びhは、このようなループに選んだ最後のものであろうと、理にかなっています。
私の懸念は、内側のループは、サブプロセスを開けない場合、または機能が保証されていますか?
for x in a b c d; do
for x in e f d h; do
pstree $$
done
pstree $$
done
...何のサブプロセスは、ネストされたループ上で開かれていないことを出力して示唆しています。
私はおそらくループに陥っ少しですが、シェルはループをどのように動作するかの良いドキュメントがありますか?私はそれが命令の1つの層内に保たれますので、シェルがループを解釈しない方法を知っていただきたいと思います。
ceving:
このように、あなたの例を変更します。
#! /bin/bash
set -x
for x in a b; do
: x=$x
for x in c d; do
: x=$x
a=test
done
echo $x
done
この出力:
+ for x in a b
+ : x=a
+ for x in c d
+ : x=c
+ a=test
+ for x in c d
+ : x=d
+ a=test
+ echo d
d
+ for x in a b
+ : x=b
+ for x in c d
+ : x=c
+ a=test
+ for x in c d
+ : x=d
+ a=test
+ echo d
d
今、あなたが見ることができ、内側のループは変更x
外側のループの後に。あなたは印刷するときx
は、常に内側のループの最後の値を持っています。