Я пробую следующие команды в оболочке bash:
$ ls -d .*
. .. .a .ab
$ ls .a*
.a .ab
$ ls .[!.]*
.a .ab
$ ls .[!.]?*
.ab
Разве последнее выражение не должно означать "точка, за которой следует ровно один не-точка, за которым следует ноль или более символов"? Почему это не совпадает .a
?
решение1
Вы ошибаетесь. Это означает "точка, за которой следует ровно одна не-точка, за которой следует один символ, за которым следует ноль или более символов". .a
не имеет достаточного количества символов для сопоставления.
Но на самом деле, просто установите dotglob
.