Bashでは、このコマンドの構文は次for
のとおりです。
for name [ [in [words ...] ] ; ] do commands; done
しかし、この例はうまくいきます。
for f in ls *; do echo $f; done
私の考えでは、これは
ls *
コマンドなので、使用することはできません。代わりに、ファイル名拡張子を単語として使用できるを使用する必要がwords
あります。それでは、上記の例はなぜ機能しますか?for f in *; do echo $f; done
*
ls *
として使用するには、words
コマンド置換を使用する必要があると思います。for f in $(ls *); do echo $f; done
ただし、この例では前の例とまったく同じことは行いません。これはサブディレクトリの内容を一覧表示しますが、古いディレクトリはサブディレクトリの内容ではなくサブディレクトリのみを一覧表示します。 2つの例の間になぜこれらの違いがありますか?
答え1
ls
*
シェルによって拡張された単語です。
2番目の例では、シェルは最初に展開され、次に結果を一覧表示するために*
呼び出さls
れます。