при чтении о поиске файла Linux я получил следующее...
Для поиска файлов с помощью * подстановочный знак замените неизвестную строку *, например, если Вы помните только, что расширение было .out, введите ls *.out
и когда я попробовал следующую команду в системе (ubuntu 14.04 LTS).. Я добрался
anupam@JAZZ:~$ ls *.bash*
ls: cannot access *.bash* : No such file or directory
anupam@JAZZ:~$ ls .bash*
.bash_history .bash_logout .bash_profile .bashrc
anupam@JAZZ:~$
в первом случае, почему это не показывает такого каталога ( *.bash*
) и в следующем случае его показ файлов ( .bash*
)
Я плохо знаком с этой разновидностью, и согласно моим классам теории автоматов (*) означает какую-либо комбинацию строк включая (пустой) эпсилон, Итак, почему результаты отличаются в обоих случаи....?
Когда Вы делаете ls *
*
расширяется, прежде чем это будет передано ls
. То есть, если у нас есть три файла (a
, b
и c
) в каталоге ls *
на самом деле работает ls a b c
.
Когда Bash не может расшириться, он проходит через необработанную строку ¹. Вот почему Вы видите подстановочные знаки по ошибке, наряду с не найденным сообщением. ls
попробованный для показа списка для файла, буквально названного *.bash*
.
Итак, почему это не расширилось? Хорошо по умолчанию globbing (чем называют это подстановочное расширение) не возвратит скрытые файлы. Можно изменить это с 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
флаги, которые изменяются, как globbing работает: extglob
, failglob
, globstar
, nocaseglob
и nullglob
. Они и плот другого shopt
флаги документируются как часть руководства Bash.
Точно так же страница на Сопоставлении с образцом должна сделать для некоторого хорошего чтения.
¹, Если failglob
или nullglob
установлены.