O motivo é a ordem em que o shell processa as várias expansões e cotações. Se você digitar diretamente
find . -name "foo*"
O shell removerá as cotas e transmitirá foo*
como parâmetro para find
.
Sem as aspas, o shell executaria a globbing para o *
primeiro, resultando potencialmente em várias correspondências que confundiriam find
. Por isso, é aconselhável usar as aspas.
Mas se você read
da string de um arquivo, a variável conterá as aspas. Agora, quando você faz
> echo $LINE
"foo*"
> echo "foo*"
foo*
> find . -name $LINE
você vê que as aspas de $LINE
não serão removidas em oposição às de echo "foo*"
. Isso ocorre porque o shell primeiro manipula as cotações de echo $LINE
(não há nenhuma) e, em seguida, executa a substituição de variável, portanto, a linha lerá echo "foo*"
, mas agora as aspas permanecem.
Portanto, o seu find
procurará arquivos contendo as citações. A solução é deixar as cotações no arquivo. Não é necessário citar lá, a linha completa irá para a variável.