Я узнаю о расширении / замену команды, и при оплате вокруг примером, заметил, что эти две команды имеют различные результаты.
Например, если я CD в /usr/bin
, и выполненный ls | grep zip
, grep берет "zip" в именах файлов только.
Но когда я работаю grep zip $(ls)
в том же каталоге, grep также берет zip в содержании файла. Почему? Ubuntu 16.04.
Я знаю, что это - вопрос о новичке, но все еще было бы полезно знать почему.Спасибо.
Это вызвано тем, что grep
может работать в двух отличных режимах:
DESCRIPTION grep searches the named input FILEs for lines containing a match to the given PATTERN. If no files are specified, or if the file “-” is given, grep searches standard input. By default, grep prints the matching lines.
В ls | grep zip
, grep
команда видит список имен файлов на его стандартном входе и поисках это.
В grep zip $(ls)
, оболочка заменяет результатами ls
управляйте как список слова, который grep
обработки как аргументы имени файла, ища каждого в свою очередь шаблон zip
.
ВАЖНОЕ ПРИМЕЧАНИЕ: если какие-либо из имен файлов будут содержать пробелы, то разделенные пробелом части будут рассматривать как отдельные аргументы, приводящие к No such file or directory
ошибки. Более безопасный способ искать соответствие файлам состоит в том, чтобы использовать шарики оболочки, например. grep 'pattern' *zip*