Использование двойных или без кавычек с подстановочными знаками

Я наткнулся на эту статью, которая пытается объяснить команду find. Она дает пример

find /tmp -iname "data*.txt" 

теперь в этой статье говорится, что

Двойные кавычки не подавляют замену слов, начинающихся с «$», но они подавляют расширение подстановочных символов.

Также, когда я попробовал две команды

 admin@localhost Downloads$ ls gallifrey-road-doctors-14437-1366x768.jpg mydir admin@localhost Downloads$ find . -iname "*gall*" ./gallifrey-road-doctors-14437-1366x768.jpg admin@localhost Downloads$ find . -iname "*gall*" -----> A ./gallifrey-road-doctors-14437-1366x768.jpg admin@localhost Downloads$ find . -iname *gall* -----> B ./gallifrey-road-doctors-14437-1366x768.jpg admin@localhost Downloads$ 

Результат, похоже, тот же. В каком случае они будут отличаться? Почему двойная кавычка не подавляет расширение шаблона в A ? Я был под впечатлением, что A не будет работать, и только B будет работать.

  • Mutt: могу ли я определить свои собственные правила для обнаружения котируемых сообщений?
  • Скопировать новейший файл в каталог через SSH
  • Подстановка Bash с переменной, определенной из шаблона glob
  • Необходимо установить переменную с ""
  • Использовать параметр в аргументе команды
  • в чем разница между использованием «одиночных кавычек» или нет в команде find
  • Как извлечь строку между двумя \ n в файле
  • Почему возникает ошибка при двойном цитировании одинарных кавычек в скрипте, который запускает удаленную команду SSH?
  • One Solution collect form web for “Использование двойных или без кавычек с подстановочными знаками”

    В случае B:

     find . -iname *gall* 

    Оболочка будет расширять *gall* в список всех файлов, соответствующих этому шаблону. Поскольку у вас есть только один файл в вашем текущем каталоге, соответствующий этому шаблону, это становится:

     find . -iname gallifrey-road-doctors-14437-1366x768.jpg 

    … поэтому find будет искать файлы, соответствующие этому точному имени. foo-gallifrey-road-doctors-14437-1366x768.jpg не будет найден. Если у вас есть два или более файла, которые соответствуют glob, у вас получится некорректная команда find; Я уверен, что он просто выйдет с ошибкой.

    В случае A:

     find . -iname "*gall*" 

    Из-за кавычек оболочка не будет расширять шаблон. Это просто становится (это то, что видит видит):

     find . -iname *gall* 

    После этого команда find использует этот шаблон для поиска всех файлов (и каталогов и т. Д.), Соответствующих этому шаблону. Это найдет как gallifrey-road-doctors-14437-1366x768.jpg и foo-gallifrey-road-doctors-14437-1366x768.jpg и каждый файл, соответствующий шаблону *gall* .

    Итак: ваша команда проходит через оболочку (которая не расширяет globs внутри кавычек и не удаляет внешний слой кавычек), а затем проходит find , который внутренне использует шаблон для соответствия именам файлов.

    Interesting Posts

    Установить пакеты без подключения к Интернету

    Простой веб-сервер python не выполняет сценарии CGI

    SquashFS + UnionFS как корневая файловая система?

    Как отсортировать несколько столбцов со столбцом, включая дату?

    Как создать постоянную точку монтирования tmpfs при перезагрузке?

    Linux WordPress не может писать файл wp-config

    Извлечение с помощью grep / sed первого шаблона, а затем второго шаблона, который имел некоторые строки до и связанные с первым

    Лучшая файловая система для слияния с разными дисками формата / скорости?

    путают о двойном цитировании

    bash regex: метасимвол asterisk убивает избыточные символы новой строки

    Значение fcntl … F_SETLK … (Ресурс временно недоступен) в выводе strace?

    Как отключить BIOS DELL через Ubuntu?

    Как правильно настроить правильную запись меню GRUB 2 по умолчанию?

    Почему resolv.conf записано без «e»?

    Postfix-файл записывает ошибку только при отправке писем с смартфона

    Linux и Unix - лучшая ОС в мире.