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.