Quando você faz grep ls*
, o shell primeiro expande ls*
para uma lista de arquivos correspondentes no diretório atual, então o comando se torna
ls -l | grep ls lsblk lsmod
Nesse caso, grep
ignorará a entrada padrão e tratará o primeiro argumento ls
como um padrão a ser correspondido dentro dos arquivos lsblk
e lsmod
, como se você digitado grep ls lsblk lsmod
(presumivelmente em /bin
):
$ grep ls lsblk lsmod
Binary file lsblk matches
Binary file lsmod matches
Por outro lado, se não houver correspondências glob no diretório atual e a opção nullglob
do shell não estiver definida, então ls*
será deixado un expandido, de modo que grep
vê ls*
e corresponde a qualquer arquivo nomes correspondendo l
seguido por zero ou mais s
caracteres (basicamente qualquer nome de arquivo com l
) eg:
$ pwd
/home/steeldriver
$ echo ls*
ls*
(não há arquivos correspondentes ao shell glob ls*
no meu diretório pessoal); então
$ ls /bin | grep 'ls*'
bzless
chacl
false
.
.
.
zless
tl; dr não faça isso