Isso ocorre porque grep
pode operar em dois modos distintos:
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.
Em ls | grep zip
, o comando grep
vê uma lista de nomes de arquivos em sua entrada padrão e pesquisa isso.
Em grep zip $(ls)
, o shell substitui os resultados do comando ls
como uma lista de palavras, que grep
trata como argumentos de nome de arquivo, pesquisando cada um por sua vez pelo padrão zip
.
OBSERVAÇÃO IMPORTANTE: se algum dos nomes de arquivos contiverem espaços, as partes separadas por espaços serão tratadas como argumentos separados, resultando em No such file or directory
erros. maneira de procurar arquivos correspondentes é usar globs shell, por exemplo grep 'pattern' *zip*