Quando e por que preciso citar asteriscos [duplicados]

0
    

Esta pergunta já tem uma resposta aqui:

    

Eu não acho que eu já agradeço as regras de quando e por que alguém precisa duplicar as coisas no Linux / Bash (eu não tenho certeza se o domínio desse problema é Linux, Bash, ou qualquer outra coisa). Pensei que * correspondia a qualquer número de caracteres (incluindo nenhum), e isso parece se alinhar com o artigo da Wikipédia . Mas quando tentei usar o curinga * da seguinte forma, obtive resultados que não entendo:

>pwd
/home/user/foo/foo/test
>tree 
.
├─ main.opp
└─ test
   └─ test.opp

>find ../ -name *.opp
../test/test.opp

>find ../ -name "*.opp"
../main.opp
../test/test.opp

>cd ..
>pwd
/home/user/foo/foo

>find . -name *.opp
./main.opp

>find . -name "*.opp"
./main.opp
./test/test.opp

Por que o find com o argumento *.opp sem aspas duplas retorna apenas um hit, enquanto que o dobro do mesmo retorna os dois resultados esperados?

    
por StoneThrow 06.06.2017 / 02:21

2 respostas

2

Depende quando a expansão é avaliada. Se você não citar o asterisco, bash o avalia primeiro. É equivalente a chamar find . -name main.opp . Se você citar o asterisco, ele será passado como está para descobrir qual deles o usa da maneira esperada.

    
por 06.06.2017 / 02:34
2

Sem aspas, o bash expandirá o asterisco se houver algum arquivo correspondente no diretório atual. Aqui eu uso echo para depurar a expansão.

~/foo/foo/test$ echo find ../ -name *.oop
find ../ -name test.oop
~/foo/foo/test$ cd ..
~/foo/foo$ echo find . -name *.oop
find . -name main.oop

Se você procurar por algo que não forneça uma correspondência no diretório atual, ele não será expandido:

~/foo/foo$ echo find . -name test.*
find . -name test.*
~/foo/foo$ find . -name test.*
./test/test.oop
    
por 06.06.2017 / 08:14