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

Я наткнулся на эту статью, которая пытается объяснить команду 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 будет работать.

  • Пазл расширения
  • замена внутри параллельной командной строки
  • Определить папку в bash
  • печать строки "canonical print-escaped form"
  • Конфликт группы контекста Bash
  • Как я могу повторить знаки доллара?
  • переменное расширение в подстановке команд над SSH bash 4.X
  • Как использовать multiline как group-separator в grep?
  • 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 , который внутренне использует шаблон для соответствия именам файлов.

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