`echo $TEST` expandir um asterisco na variável é um bug?

`echo $TEST` expandir um asterisco na variável é um bug?

Isso é um bug do Bash?

$ mkdir test && cd test && echo "a" > "some.file"
test$ echo '*'
*
test$ TEST=$(echo '*')
test$ echo $TEST
some.file

Por que a segunda saída é a resolução de *(todos) os nomes de arquivos em vez de apenas uma saída literal *? Parece um bug no Bash?

Tentei no Ubuntu 18.04, versão bash 4.4.19(1)-release. Espere que seja o mesmo em outros sistemas operacionais.

Responder1

Não, não é um bug. Você mostrou isso

echo '*'

produzirá um literal *. Portanto, quando você substitui esta saída, conforme o seguinte comando

TEST=$(echo '*')

ele será colocado *na variável $TEST. Então quando você

echo $TEST

o globo se expandirá aqui. Você pode verificar isso executando este último comando, alterando os diretórios e executando-o novamente.

Você obterá a *saída se disser

echo "$TEST"

como explicadoaqui, as aspas duplas permitem que a variável seja expandida, mas evitam que o globo se expanda.

informação relacionada