ディレクトリ内のすべての項目を繰り返しますか?

ディレクトリ内のすべての項目を繰り返しますか?

まあ、これを重複してすぐに終了する前に説明します。私は次のような多くの方法を試しました。

for d in /Applications ; do
   echo "$d"
done

しかし、これは戻ります

/アプリケーション

/Applicationsの内容ではありません。

私も次のことを試しました。

#!/bin/bash
FILES=/Applications

for file in $FILES
do
   echo $file
done

基本的には同じです。しかし、これを行うと、次のことがわかりました。

#!/bin/bash

for file in *
do
    echo $file
done

私のホームフォルダ内のすべてのフォルダを正しく反映しています。何が起こっているのか知っている人はいますか?

ベストアンサー1

これを*シェルグロービング(パス名拡張)演算子(?また[])と呼び、引用符なしで呼び出すと、現在のディレクトリ内のすべてのファイル(ディレクトリプレフィックスなし)に展開されます。たとえば、プレフィックスを使用すると、/foo/*ディレクトリ内のすべてのファイルに展開されます/foo

特定のファイルを一致させるためにも使用されます。たとえば、foo現在のディレクトリで始まり終わるファイルだけを一致させるには、globパターンを使用します。bar

foo*bar

したがって、forループは次の形式を取ることができます。

for f in foo*bar; do echo "$f"; done

manシェルワイルドカードの詳細については、シェルページをお読みください。

おすすめ記事