Por que a expansão do glob do arquivo não é suprimida

5

Eu tenho o seguinte script my.sh :

echo $@

Agora eu quero ver a expansão do arquivo glob, então eu gosto disso e funciona bem:

$ bash my.sh *
$ f1 f2 my.sh

Agora, eu tentei suprimir a expansão usando técnicas descritas em esta resposta :

$ bash my.sh "*"
$ bash my.sh \*

Mas ainda recebo a listagem de todos os arquivos como saída. Por quê?

    
por Max Koretskyi aka Wizard 03.02.2017 / 17:40

1 resposta

5

Com a primeira invocação do seu script

$ bash my.sh *

o nome do arquivo globbing é executado pelo shell antes de chamar o script.

Com a segunda invocação do seu script

$ bash my.sh "*"

o nome do arquivo globbing é executado no script ao executar echo $@ .

Para evitar isso, aspas duplas $@ nessa linha:

echo "$@"

Outras leituras: Implicações de segurança de esquecer de citar uma variável em shells bash / POSIX

    
por 03.02.2017 / 17:56