Це, ймовірно , варто згадати про те , що unixy / posixy оболонка , таких як оболонки Борна, Баш, KSH, Zsh, і т.д. зробити підстановлювальний розширення (з GLOB символів подобаються *
, ?
, [range]
, [!range]
та інші розширення , як дужки і розширені грудки) скласти список аргументів , перш ніж команда виконується. Таким чином, це розширення виконується оболонкою, а не командою, для якої це можуть бути аргументи.
тобто оболонка відповідає за те *
, за що *.*
розширюється
$ ls
file.csv file.doc file.pdf file.txt file.xlsx zz-file-without-extension
$ (set -xv; foo *) # is actually expanded to the following
+ foo file.csv file.doc file.pdf file.txt file.xlsx zz-file-without-extension
$ (set -xv; foo *.*) # note this does not match `zz-file-without-extension`
+ foo file.csv file.doc file.pdf file.txt file.xlsx
Це не так у CMD (і аналогічно для утиліти powershell ), оскільки він переносить символи глобально дослівно у виконану команду - і тому розширення є обов'язком команди / утиліти, а не оболонки. Отже, в остаточному підсумку, що *.*
або *
засоби залишається утиліті, залишаючи її відповідати (або ні) конвенціям - саме тому утиліти CMD, як dir *.*
і відповідні (можливо, неправильно, але зберігають очікування) файли без розширень.
Я вважаю, що безпечно підсумувати цей спосіб.
- Під CMD це залежить від корисності.
- У програмі PowerShell утиліти, які використовують клас WildCardPattern , забезпечуватимуть послідовний підмножина позікси-поведінки.
*
і*.*
в даний час еквівалентні дляcmd
внутрішніх команд і сучасних утиліт командного рядка, деякі старі утиліти , які приймають параметри маски файлів можуть використовувати старі функції зіставлення файлів, а також для них маски не будуть еквівалентні.