Почему не работает grep? [закрыто]

Команда получит аргументы после их обработки оболочкой.

При первой обработке, некавычки * будут расширены оболочкой (до списка файлов в текущем каталоге (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 файла.

3
11.08.2017, 22:32
2 ответа

Не удалось воспроизвести:

$ echo '<3' > foo
$ grep "<3" *
foo:<3
1
27.01.2020, 21:12
grep "<3" -- *

С помощью --вы можете определить конец опций и начало позиционных аргументов для многих программ GNU. Таким образом, файл -lне причиняет никакого вреда.

Альтернативой является

grep "<3"./*
6
27.01.2020, 21:12

Теги

Похожие вопросы