Еще в 1990-е годы, я хотел бы использовать " по -*.*
", чтобы представлять любое имя файла в MS-DOS, но я'вэ видел больше скриптов, используя только "в*
" в эти дни. Это на самом деле какая разница что я использую?
Имя файла и его расширение были field_ _single начиная с Windows 95 и NT 3.5 введен с "длинным названием файл" Поддержка и Wildcard матчи проводятся против всего именем сразу. В результате, вы можете иметь имя файла без точки в нем (возможно, редких для файлов, а для папок/директорий) и на первый взгляд *.*
не'т действительно соответствовать такие файлы.
Старые сценарии, используя *.*
Доберемся до сих пор работает, потому что код совместимости – если шаблон заканчивается на .*
, эта часть проигнорирован операционной системы. (Так что, если хочешь конкретно файлы with расширение, я думаю, вы должны были *.?*
для этого.)
Но это's не то, что вы должны полагаться на; Если вы'вновь писать сценарии для современных версий ОС Windows, выполните свои съезды, не МС-Дос конвенций. (Обратите внимание, что в Windows НТ .bat-скриптов не интерпретируется МС-Дос больше, но по cmd.exe а встроенный Win32-программа).
В Linux и других Unixen, имя & расширения, никогда не были отдельными, в первую очередь, и есть _isn'быть, никакой особой магии, чтобы сделать *.*
работы, так *
- это единственный выбор, который имеет смысл.
Это's наверное стоит упомянуть, что unixy/posixy оболочки как оболочки Bourne, Баш, КШ, ЗШ и т. д. расширение подстановочных знаков (символов Глоб, как*
, ?
, [диапазон]
, `[!диапазон] и другие расширения, такие как брекеты и удлиненной капельки) составить список аргументов перед выполняется команда. Так что это расширение осуществляется в оболочке не команда, к которой они могут быть аргументы.
т. е. оболочка несет ответственность за то, что *
, *.*
расширяется
$ 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
Это не тот случай в УМК (и [точно так же для utilities в PowerShell](https://msdn.microsoft.com/library/system.management.automation.wildcardpattern(v=vs. 85).aspx)), как она проходит персонажей Глоб дословно в выполняемой команде - и так расширение является обязанностью команды/утилиты, а не оболочка. Итак, в конце концов, что *.*
или *
означает, остается на коммунальные оставляя его, чтобы соответствовать (или нет) к Конвенции, который является, почему УМК'ЖКХ как реж *.*
также соответствует (возможно еще неправильно консервирование ожидания) файлы без расширения.
Я верю, что это's, можно суммировать таким образом.