ホーム ディレクトリでターミナルに「ls *s*」と入力すると、名前に「s」が含まれるすべてのフォルダとファイルが表示されます (たとえば Music)。しかし、「ls *si*」と入力しても何も表示されません (Music が表示されるはずだと思います)。何故ですか?
1 に答える
これは錯覚です。ワイルドカードは、コマンドが実行される前に展開されます。「ls」が表示する内容は、展開の結果の単語数によって異なります。「ls」が複数のものをリストする場合、リストする各フォルダーの名前が表示されます。「ls」が 1 つのフォルダーのみを一覧表示する場合、名前は表示されず、内容のみが表示されます。
「ls *s*」と入力すると、ディレクトリに「s」を含む名前が複数あるため、文字列が複数の名前に展開されます。結果は、「ls Desktop Music」のようなものを入力したかのようになります。「ls」が複数のものをリストすると、ディレクトリ名と各ディレクトリの内容が表示されるため、次のようなリストが表示されます。
Desktop:
foo
Music:
iTunes
「ls *si*」と入力すると、ディレクトリ内で「si」を含む名前は「Music」だけなので、文字列は 1 つの名前に展開されます。結果は、「ls Music」と入力した場合と同じです。「ls」で 1 つのフォルダーを一覧表示すると、フォルダーの内容のみが表示され、名前は表示されないため、次のような一覧が表示されます。
iTunes
「ls」に内容ではなく一致するものだけをリストさせるには、「ls -d *si*」を使用します。「-d」は、ディレクトリの内容をリストするのではなく、ファイルをリストするのと同じ方法でディレクトリをリストすることを示します。