¿Es esto un error de Bash?
$ mkdir test && cd test && echo "a" > "some.file"
test$ echo '*'
*
test$ TEST=$(echo '*')
test$ echo $TEST
some.file
¿Por qué la segunda salida es la resolución de (todos) los nombres de archivos en lugar de solo una salida *
literal ? *
¿Parece un error en Bash?
Probado en Ubuntu 18.04, versión bash 4.4.19(1). Espere que sea lo mismo en otros sistemas operativos.
Respuesta1
No, no es un error. Tu has demostrado que
echo '*'
producirá un literal *
. Por lo tanto, cuando sustituye esta salida, según el siguiente comando
TEST=$(echo '*')
lo pondrá *
en la variable $TEST
. Entonces cuando tu
echo $TEST
el globo se expandirá aquí. Puede verificar esto ejecutando este último comando, cambiando directorios y luego ejecutándolo nuevamente.
Obtendrás el *
resultado si dices
echo "$TEST"
como se explicaaquí, las comillas dobles permiten expandir la variable pero evitan que el globo se expanda.