Це, ймовірно , варто згадати про те , що 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внутрішніх команд і сучасних утиліт командного рядка, деякі старі утиліти , які приймають параметри маски файлів можуть використовувати старі функції зіставлення файлів, а також для них маски не будуть еквівалентні.