あなたの期待はDOS Think / Windows Thinkに基づいており、間違っています。MS-DOS、Windows、および実際には他のいくつかのIBM / Microsoftオペレーティングシステムでは、ワイルドカード拡張はコマンド自体によって行われ、コマンドの/a
オプションなどはdir
ワイルドカード拡張時に属性フィルターとして機能します。 dir
のようなワイルドカードを展開*
し、コマンドインタープリターがそのまま渡し、/a
指定されている場合は、返されるものに適切なフィルターを適用します。(一部のオペレーティングシステムでは、ディレクトリを列挙するためのシステムコールに属性フィルターを与えることができ、オペレーティングシステムカーネル、またはそのファイルシステムドライバーがそれらを適用します。)
UnicesおよびLinuxでは、ワイルドカードの展開はシェルによって行われ、権限は無視されます。ルートディレクトリで、あなたがするとき
ls *
ls
コマンド自体がシェルから受け取るものは次のようなものです
ls bin home opt var boot dev tmp etc lost + found root usr
何-d
/ --directory
オプションがないことである、通常は次に何が起こるかオフ。次に通常行われるのls
は、各引数を順番に見て、それらがディレクトリであることを確認し、その内容を列挙することを決定することです。ファイルに名前を付ける引数については、ファイル自体の情報を出力するだけです。この-d
オプションを使用すると、ディレクトリはファイルと同様に扱われます。そのls
ため、引数として渡された各ディレクトリの情報を、ファイルの場合と同じように出力します。
そう-d
ではありません「ディレクトリだけを印刷する」オプションを選択します。実際、そのようなオプションがないだけではありません。そのようなオプションは存在できません。ワイルドカードの展開はシェルによって行われ、(sh
少なくともPOSIXでは)シェル*
が名前のリストに展開するときに許可とファイルタイプビットをチェックするように指示する方法はありません。単独のディレクトリの名前のリストを取得するには、それが必要であるのいずれかを使用するfind
ことで説明したように、コマンドをztank1013
、またはスラッシュで終わるパス名は、ディレクトリエントリを意味していることのトリックを使用する.
ことで説明したように、Jin
。(Jin
のトリックは、ls
コマンドが引数を受け取ることになります
ls bin / home / opt / var / boot / dev / tmp / etc / lost + found / root / usr /
パターンがあるため*/
二つの成分を有する事実マッチングパス名であり、第二ビーイングは空などされていない非常に望まれていた何を。特に、ディレクトリを指しているシンボリックリンクをディレクトリであるかのように扱います。
ls -d
なしの動作は*
、上記の単純な拡張です。一つは、単にに関するもう一つのことを知っている必要がありls
、それは引数を与えられていない場合、それはデフォルトの引数を想定していました:.
。さてなし-d
オプションで指定されたディレクトリの内容に、前述の行動リードが.
列挙され、その内容についての情報が表示さ。 では-d
オプション、ディレクトリは.
それがファイルであるかのように扱われ、独自の情報は、その内容を列挙するのではなく、表示されています。