2つの拡張の違い

2つの拡張の違い

ls *とコマンドを入力すると、echo *結果に大きな違いがあることがわかります。前者は再帰的に含まれ、後者はサブディレクトリのファイルを完全に除外します。パス名の拡張に対して異なる動作をしますか?

ベストアンサー1

lsパラメータとして渡されると、デフォルトではディレクトリの内容が一覧表示されます。これを*シェルに渡すと、あなたの殻*現在の作業ディレクトリ内のすべてのファイルとディレクトリに展開し、対応するパラメータを取得lsして処理します。その結果、指定されたディレクトリの内容と現在の作業ディレクトリのファイルが一覧表示されます。

echoシェル拡張の場合、*echoは引数として渡されたコンテンツのみを印刷するため、ディレクトリの内容を取得できません。

lsディレクトリの内容が表示されないように指示するために使用できますls -d *

この設定を考慮すると:

$ mkdir dir{1,2}
$ touch file{1..3} dir{1,2}/morefiles{1..5}
$ ls
dir1  dir2  file1  file2  file3

*シェルに渡され、bashが*に拡張されますdir1 dir2 file1 file2 file3echowithを使用する*と、echoシェルの拡張内容が表示されます*

$ echo *
dir1 dir2 file1 file2 file3

ただし、デフォルトで指定されたディレクトリ引数は、リストされlsたディレクトリの内容を拡張します。

$ ls *
file1  file2  file3

dir1:
morefiles1  morefiles2  morefiles3  morefiles4  morefiles5

dir2:
morefiles1  morefiles2  morefiles3  morefiles4  morefiles5
$ 

*onを削除するかls(例のディレクトリ構造を作成した後に表示されます)、私の答えで述べたように、次のものを使用できますls -d *

$ ls -d *
dir1  dir2  file1  file2  file3

lsこれにより、およびの内容の表示が停止します。dir1/dir2/

おすすめ記事