「単語」の「単語名」実行完了`

「単語」の「単語名」実行完了`

Bashでは、このコマンドの構文は次forのとおりです。

for name [ [in [words ...] ] ; ] do commands; done
  1. しかし、この例はうまくいきます。

    for f in ls *; do echo $f; done
    

    私の考えでは、これはls *コマンドなので、使用することはできません。代わりに、ファイル名拡張子を単語として使用できるを使用する必要がwordsあります。それでは、上記の例はなぜ機能しますか?for f in *; do echo $f; done*

  2. ls * として使用するには、wordsコマンド置換を使用する必要があると思います。

    for f in $(ls *); do echo $f; done
    

    ただし、この例では前の例とまったく同じことは行いません。これはサブディレクトリの内容を一覧表示しますが、古いディレクトリはサブディレクトリの内容ではなくサブディレクトリのみを一覧表示します。 2つの例の間になぜこれらの違いがありますか?

ベストアンサー1

ls*シェルによって拡張された単語です。

2番目の例では、シェルは最初に展開され、次に結果を一覧表示するために*呼び出さlsれます。

おすすめ記事