Команда получит аргументы после их обработки оболочкой.
При первой обработке, некавычки *
будут расширены оболочкой (до списка файлов в текущем каталоге (pwd), которые соответствуют шаблону):
echo *.zip
Перечислит все .zip
файлы. Но echo "*".zip"
не перечислит.
При первой обработке закавыченный "*"
не будет расширен, он будет передан команде unzip в качестве параметра (после удаления кавычек). Команда unzip получит параметр *.zip
:
$ echo unzip "*".zip
unzip *.zip
Именно команда unzip расширит *
до списка файлов.
Интересно также, что эти две команды не выполняют одно и то же конечное действие, и кто расширяет *
изменения:
unzip "*".zip ### the command unzip expands `*.zip`.
unzip *.zip ### the shell expands `*.zip`.
Первая команда получает *.zip
, который она расширяет для обработки всех файлов.
Вторая команда unzip
получит список всех .zip
файлов в pwd, которые она не будет обрабатывать, поскольку разработчик unzip решил отказаться от расширения более чем одного zip
файла.
Не удалось воспроизвести:
$ echo '<3' > foo
$ grep "<3" *
foo:<3
grep "<3" -- *
С помощью --
вы можете определить конец опций и начало позиционных аргументов для многих программ GNU. Таким образом, файл -l
не причиняет никакого вреда.
Альтернативой является
grep "<3"./*