Bash скрывает скрытые файлы

Я пытаюсь использовать следующие шарики в оболочке bash:

$ ls -d .* . .. .a .ab $ ls .a* .a .ab $ ls .[!.]* .a .ab $ ls .[!.]?* .ab 

Разве последнее выражение не должно означать «точка, за которой следует ровно одна точка, а не ноль или более символов»? Почему это не соответствует .a ?

Вы ошибаетесь. Это означает «точка, за которой следует ровно одна точка без точки, за которой следует один символ, за которым следуют ноль или более символов». .a не имеет достаточного количества символов для его соответствия.

Но на самом деле, просто установите dotglob .