秒(インナー)ループは、サブプロセスをオープンしていますか?

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は、常に内側のループの最後の値を持っています。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=281059&siteId=1