Ответы:
Цитирование из спецификации Unix версии 2, том «Команды и утилиты», §2.13.3 :
Если имя файла начинается с period (
.), период должен явно совпадать, используя точку в качестве первого символа шаблона или сразу после символа косой черты. (…) Не указано, может ли явный период в списке соответствия выражений в скобках, например,[.abc]совпадать с начальным периодом в имени файла.
Не существует исключения, при котором второй период ..или пустая строка, следующая за единственным периодом ., не совпадают с подстановочным знаком в .*. Поэтому в стандарте говорится, что это .*соответствует, .и.. , хотя это может раздражать.
В приведенном выше отрывке описывается поведение оболочки ( shкоманды). Раздел о globфункции библиотеки C ссылается на этот отрывок.
Язык точно такой же, как в версии 3 , также известной как POSIX: 2001 и IEEE 1003.1-2001, которая используется в большинстве современных систем.
Dash, bash и ksh93 соответствуют POSIX. Пдкш и зш (даже под emulate sh) нет.
В ksh вы можете .*пропустить .и .., установив FIGNORE='.?(.)', но у этого есть побочный эффект создания *файлов точек. Или вы можете установить FIGNORE='.*', но тогда .*ничего не соответствует.
В bash вы можете .*пропустить .и .., установив GLOBIGNORE='.:..', но это побочный эффект от *включения файлов точек. Или вы можете установить GLOBIGNORE='.*', но тогда .*ничего не соответствует.
Вероятно, вы имеете в виду функциональность в расширении bash о globignore. По умолчанию расширение bash соответствует. и .. но читая человека:
The GLOBIGNORE shell variable may be used to restrict the set of file names matching
a pattern. If GLOBIGNORE is set, each matching file name that also matches one of
the patterns in GLOBIGNORE is removed from the list of matches. The file names ``.''
and ``..'' are always ignored when GLOBIGNORE is set and not null. However, setting
GLOBIGNORE to a non-null value has the effect of enabling the dotglob shell option,
so all other file names beginning with a ``.'' will match. To get the old behavior
of ignoring file names beginning with a ``.'', make ``.*'' one of the patterns in
GLOBIGNORE. The dotglob option is disabled when GLOBIGNORE is unset.
Вы можете установить переменную GLOBIGNORE=.:..так, когда вы что-то вроде этого:
rm -r * .*
вы удаляете только текущий каталог. Стандарт POSIX только указывает это. является текущим каталогом и .. в родительском элементе текущего каталога. Особое значение. * Интерпретируется bash или другими оболочками (или такими программами, как grep).
Linux людей-страница ссылка POSIX.2, 3,13.
man, man globили человеко-страницы , чтобы присутствовать? Я не мог найти мужчину здесь (к моему удивлению).
Насколько я могу сказать, LSB 4.1 не требует bashи только sh.
За sh ним следует POSIX (с одним второстепенным не относящимся к делу расширением).
bashне всегда соответствует POSIX. только когда он вызывается какsh.