これが出力です。
echo *.*
file1.txt file2.txt file3.txt
echo * .*
file1.txt file2.txt file3.txt . ..
2番目のコマンドにピリオドの前にスペース文字が含まれていない場合、これらのファイルが含まれるのはなぜですか?たくさん愛してくれてありがとう!
答え1
これらは2つの別々の領域です。最初の項目は*
隠しファイルを除くすべての項目と一致するのでfile1.txt
、file2.txt
、file3.txt
。 2番目は.*
、名前が:で始まる隠しファイルとディレクトリにのみ一致するため、およびを.
印刷します。.
..
スペースの後にピリオドがあるファイル/ディレクトリ名のみを印刷するには、スペースが区切り文字として扱われないようにスペースをエスケープする必要があります。
$ ls
file1.txt 'file2 .txt'
$ echo *\ .*
file2 .txt
最後に、これが「すべてと一致する」という意味ではないことに言及したいと思います*.*
。 Windowsシステムとは異なり、* nixシステムにはファイル名拡張子は必要ありません(まれな例外がありますが、拡張子は完全にオプションで任意です)。 * nixシステムでは、globは名前にaを含むファイル名*.*
のみを印刷します。.
$ ls
file file1.txt 'file2 .txt'
$ echo *.*
file1.txt file2 .txt
すべてのファイルを印刷するには、単一を使用します*
。
$ echo *
file file1.txt file2 .txt
答え2
コマンドの引数は、引用符で囲まない限り、スペースで区切られます。
echo *.*
「すべての文字」(*
)、そのあとにドット(.
)、および「すべての文字」()を含む*
ファイル名と一致します。
echo * .*
最初のパターンは、「すべての文字」(*
)を含むファイル名と一致します。 2番目のパターン( " .*
").
はドット()で始まり、その後に「すべての文字」()が続く*
ファイル名と一致します。これらの「ドットファイル」は一致しないため、*
しばしば「隠し」ファイルと呼ばれます。
表示される2つのエントリ( " .
"と " ..
")は、現在のディレクトリと親ディレクトリへの必須リンクです。
NUL 0x00
スペースやその他の「興味深い」文字(ファイル名にはスラッシュのみが禁止されています/
)を含むファイル名を処理するのは複雑なので(読むman find xargs
)、可能であれば避けるべきです。
ファイル名にスペースを引用するにはいくつかの方法があり、それぞれの方法で詳細が少しずつ異なります。
echo *\ .*
echo *" ."*