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 file3
。echo
withを使用する*
と、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/