forループのコードがbashシェルの最初のディレクトリでのみ実行されるのはなぜですか?

forループのコードがbashシェルの最初のディレクトリでのみ実行されるのはなぜですか?

というディレクトリの下には、特定のタスクを実行したいaサブフォルダがたくさんあります。誰もが同じです。次のことを行いますが、最初のサブディレクトリでのみ機能します。

for i in "a/*"
    do
            #echo $i
            cd $i
            mkdir test
            mv *_no test
            touch aaa
            cd ..
    done

上記のコードを使いたいですa

ベストアンサー1

最初のcdchdirは最初のディレクトリ(2つのレベルのサブディレクトリ)に移動します。cd1つのレベルだけが戻ってきたので、その後は2番目のレベルに進むことはできません。つまり、始まった場所に戻りません。しかし、それにもかかわらず、まだ「a / *」という1つの値を繰り返しています。

この内容を引用したため、拡張されません。

しかし、周囲に引用符を入れることを忘れたので、$iその時点では引数に拡張されますcd

コードには他の多くの問題があります。

改善のためのいくつかの提案:

for i in a/*/; do
  (
    cd -- "$i" &&
      mkdir -p test || exit
    mv -- *_no test
    touch aaa
  )
done

おすすめ記事