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

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

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 , который внутренне использует шаблон для соответствия именам файлов.

  • Почему «grep». * «файл» работает и «grep. * файл« нет »?
  • bash -c в подоболочке дает ошибку анализа EOF
  • Как передать аргументы в процесс Java из сценария оболочки
  • Как я могу предотвратить столкновение $ @ с двойной цитатой в bash?
  • Замените обратную косую черту sed
  • Выполняют ли программы, вызванные оболочкой, наследовать переменные оболочки?
  • bash добавляет апострофы к расширенной переменной
  • Необходимо установить переменную с ""
  • Zsh, возможно, добавляет кавычки к переменной значения (работает в bash, хотя)
  • Получить время процесса в секундах
  • Замена белых пробелов / символов на обратную косую черту
  • Подстановка Bash с переменной, определенной из шаблона glob
  • Linux и Unix - лучшая ОС в мире.