Коли ви розширюється до того, що передається . Тобто , якщо у нас є три файли ( , і ) в каталозі насправді працює .ls *
*
ls
a
b
c
ls *
ls a b c
Коли Bash не в змозі розгорнутись, він проходить через необроблений рядок¹. Ось чому ви бачите підстановку в помилці, а також не знайдене повідомлення. ls
намагався показати перелік файлу, який буквально називається *.bash*
.
То чому б це не розширилося? Ну а за замовчуванням глобалізація (так називається розширення підстановки) не поверне приховані файли. Ви можете змінити це shopt -s dotglob
(це не збережеться, якщо ви не вставите його в своє .bashrc
- воно може бути відключено за замовчуванням з уважної причини, тому будьте обережні), ось короткий демонстраційний приклад:
$ ls *.bash*
ls: cannot access *.bash*: No such file or directory
$ shopt -s dotglob
$ ls *.bash*
.bash_aliases .bash_history .bash_logout .bashrc .bashrc.save
Виняток з цього - як ви вже показали - коли ви вже чітко заявили, що файли будуть приховані з таким малюнком .bash*
. Він просто переосмислює dotglob
налаштування за замовчуванням :
$ shopt -u dotglob # unset dotglob
$ ls .bash*
.bash_aliases .bash_history .bash_logout .bashrc .bashrc.save
У будь-якому разі, крім цієї химерності, я сподіваюся, що це допоможе вам зрозуміти, що відбувається під поверхнею.
Є й інші shopt
прапори , які змінюють , як підстановка роботи: extglob
, failglob
, globstar
, nocaseglob
і nullglob
. Вони та плот інших shopt
прапорів задокументовані як частина посібника Bash .
Аналогічно, сторінка зі співпаданням малюнків повинна добре читати.
¹ Якщо немає failglob
або nullglob
встановлено.