シェルでサブディレクトリ操作を実行するには?

シェルでサブディレクトリ操作を実行するには?

たとえば、n個のソートされたサブディレクトリからコマンドを実行します。ここで、nは入力です。または、その範囲を入力として使用できるサブディレクトリ範囲に対してforループをどのように実行できますか?以下のように、ここで範囲をどのように定義する必要がありますか?

for d in ["sd1"-"sd2"] do ( cd "$d" && do stuff ) done

ベストアンサー1

中かっこ拡張をサポートするシェルがある場合は、中かっこ拡張を使用してください。

for d in sd{1..2}; do
    ( cd "$d" && dostuff )
done

zshksh93またはyash -o braceexpand(除く)を使用してbashこれを実行できます。

n=4
for d in sd{1..$n}; do
    ( cd "$d" && dostuff )
done

関連質問:"eval"なしで{}拡張で変数を使用できますか?

これに対するバリエーションは次のとおりです。

for (( i=1; i<=n; ++i )); do
  str="sd$i"
  ( cd ... )
done

forこれは、他のシェルでサポートされているのと同じCスタイルループですbash(まだPOSIX標準の拡張にもかかわらず)。

おすすめ記事