Подстановочный символ `* ` не может соответствовать некоторой строке?

Подстановочный символ `* ` не может соответствовать некоторой строке?
ls  -al  .functions*
-rw-r--r-- 1 root root 471040 Mar  2 10:01 .functions.php.swo
-rw-r--r-- 1 root root 438272 Mar  2 09:57 .functions.php.swp

*может совпадать .php.swoи .php.swp
почему *не может совпадать .functions.php?

ls  -al  *.swo
ls: cannot access '*.swo': No such file or directory
ls  -al  *swo
ls: cannot access '*swo': No such file or directory

решение1

Файлы, начинающиеся с точки, по умолчанию скрыты из списков файлов. Самый простой способ сопоставить такие файлы — поставить точку в начале выражения. Однако это сопоставит только файлы, начинающиеся с ..

ls  -al  .*.swo

Альтернативой является установка dotglobперед запуском команды, тогда .будут включены файлы, начинающиеся с.

shopt -s dotglob

Добавьте его в свой список, ~/.bashrcчтобы установить его по умолчанию.

Обратите внимание, чтонастройка dotglobможет привести к непредвиденным результатампри использовании оболочки bash, так как при использовании будут отображаться как .(текущий каталог), так и (родительский каталог) . С помощью set,..*dotglobникогдапопробуй использовать rm -R *.

решение2

Какрасширениена ответ Шайдо я хотел бы дать некоторые пояснения, почему эта -aопция здесь не сработает:

Команда lsделаетнетОбработка подстановочных знаков. Интерпретатор командной строки выполняет этот шаг:

Если ввести командную строку " mycommand *.c", интерпретатор командной строки сначала заменит подстановочную строку " *.c" списком соответствующих файлов, а затем выполнит полученную командную строку:

mycommand a.c file.c test.c

Интерпретатор командной строки работает одинаково для всех команд, поэтому он не может знать, что -aозначает «включая скрытые файлы» в данном случае ls(хотя -aдля других команд это имеет совершенно другое значение)...

Связанный контент