Как называется
*.*
символ и каково его значение?
Как называется
*.*
символ и каково его значение?
*.*
под старыми системами Windows / DOSЗначение здесь больше связано с Windows / DOS, чем с Unix / Linux. В старых системах Windows / DOS это был шаблон с подстановочными знаками. Шаблоны подстановочных знаков использовались для сопоставления имен файлов аналогично глобусам Unix. *.*
Подстановочная широко используется , чтобы соответствовать любому файлу.
Как и в случае с глобусом Unix, переменная *
будет соответствовать любой последовательности символов в имени файла, так как *
сама по себе она также будет соответствовать любому файлу. Однако причина, по которой также *.*
будет совпадать любое имя файла, связана с различиями в работе этих подстановочных знаков. Согласно этой статье :
Любые символы, кроме точки, которые идут после звездочки, не имеют никакого эффекта, поскольку звездочка перемещает курсор в позицию 12, в которой ничто не изменяет состояние анализа, кроме точки, которая очищает последние три позиции и перемещает курсор.
Такое поведение (несколько странное с точки зрения Unix) означает, что точка, следующая за a *
, на самом деле не соответствует точке, а является просто хакерским способом, позволяющим вам добавить больше символов в шаблон. Это означает, что добавление еще одного *
будет соответствовать чему-либо в этих последних трех позициях.
Это имеет немного больше смысла, если учесть, что синтаксис использовался в DOS и старых системах Windows до Windows 95, для которой требовалось 8,3 имени файла . Эти имена файлов могли иметь только одну точку и не более трех символов после точки. Большинство, если не все файлы в системе будут иметь трехсимвольное расширение (даже если технически более короткое или расширение не будет разрешено), поэтому я думаю, что имеет смысл использовать его *.*
для сопоставления с любым файлом (по крайней мере, с искаженной точки зрения логики Windowsey). ).
*.*
в Unix оболочкахВ оболочках Unix, как указывали другие, это представляет собой «расширение пути» или «глоб». *
Не имеют нечетные прыжков до конечного поведения и , следовательно , не приводит к персонажам следующих он игнорируется. *.*
шаблон будет соответствовать любому имени файла, содержащему точку (кроме как в начале). Это определенно не будет соответствовать ни одному файлу, так как в системе Unix / Linux есть много файлов, которые не имеют расширения (или иным образом содержат точку, поскольку это тоже разрешено).
Причина, по которой *.*
точка Unix не совпадает с точкой в начале имен файлов, заключается в том, что точка в начале означает, что файлы «скрыты», а скрытые файлы по умолчанию исключаются из глобусов. Чтобы сопоставить их в оболочке POSIX, необходимо вначале поставить точку в начале шаблона. В bash
по dotglob
выбору оболочки может быть установлена или GLOBIGNORE
переменная может быть установлен соответствующим образом , но это другой вопрос!
*7.*
, получить все файлы, у которых последний символ перед расширением - «а»7
, а с помощью «*sa*
я» - все файлы, которые содержат подстроку вsa
любом месте этого имени файла, и так далее. (Соответственно, в статье вы цитируете озаглавлена Как же подстановочные работать в MS-DOS ? (Курсив мой сам).)Это
glob
в bash, ниже я привел цитату из руководства bash:В этом случае
*.*
сопоставьте любые файлы, которые содержат точку.
в своем имени.Вы можете увидеть более подробную информацию здесь .
источник
Звездочка
*
являетсяglob
в оболочке языка. Цитирование из командного языка оболочки :Тем не менее, он не совпадает с именами файлов, начинающимися с,
.
если не установлена опция оболочкиdotglob
.Когда вы используете
*.*
, это соответствует всему, что:.
.
Вы также можете обратиться к расширению имени файла в руководстве.
источник
Многие люди из Windows думают, что
*.*
это все файлы. На Windows это так. В UNIX это все файлы, которые содержат хотя бы 1 точку в своем имени.*
само по себе прекрасно работает в Windows (начиная с ранних версий DOS); однако старые учебники опубликованы,*.*
и это, кажется, трудно сломать привычку.источник
*
подстановочный знак, используемый оболочкой для расширения имени файла , также известный как «глобализация».*
расширяется до чего угодно, включая ничего (например,*.*
будет соответствоватьfile.
и т. д.). Другой общий подстановочный знак?
, который соответствует любому отдельному символу.Не путайте функцию этих подстановочных знаков с использованием одних и тех же символов в регулярных выражениях (например, тех, которые используются с grep).
источник
Это звезда-точка-звезда - по крайней мере, в мире DOS (а позже, конечно, Windows). В DOS точка
.
имеет особое магическое значение, потому что имена файлов состоят из восьми символов (позже они будут расширены, но давайте останемся прежними) и трехсимвольного расширения (которое определило тип файла). В Unix тип файла обычно определяется первыми двумя байтами файла (или другой магией), а расширение является информативным, но не имеет большого значения. За исключением случаев, когда все это стало размытым.Так что в Unix особого смысла нет. Звездочка - это «глобирующий» символ в оболочках Unix и подстановочный знак для любого количества символов (включая ноль).
?
является еще одним распространенным подстановка символов, соответствие точно один любой символ.*.*
соответствует любым именам файлов, которые содержат хотя бы одно.
. У него нет специального имени или какого-либо значения, кроме*a*
или*_*
. И*.?
будет сопоставлять любые файлы с точкой и ровно одним символом после этой точки. Существуют также более сложные расширенные шаблоны глобинга - см. Справочную страницу вашей оболочки.В «Словаре нового хакера» (расширение старого MIT «Jargon File») отмечается, что «звезда» - это наиболее распространенное имя для
*
символа (сопровождаемоеsplat
), и я думаю, что это все еще верно на практике, и.
определенно обычно » точка », поэтому, хотя он не имеет какого-либо внутреннего особого значения в качестве конгломерированного символа, последовательность по-прежнему разумно называется звездой-точкой-звездой в Unix. (Это просто менее полезно.)источник
Здесь есть фактически 2 символа, звездочка
*
и точка.
. Оболочки обычно интерпретируют звездочку как любой символ, но в регулярном выражении это будет означать жадный шар. В этом случае он будет соответствовать всему, что не заканчивается или начинается с точки, но содержит хотя бы одну:источник
onlydotatend.
случай совпадает, конечно?touch 'onlydotatend.' && echo *.*
не возвращаетbash
иdash
. Какую оболочку вы используете?zsh
конфигурации, и там тоже работает. Я не понимаю, какonlydotatend.
не может быть совпадение, есть вариант конфигурации, который делает это?