Это ошибка Bash?
$ mkdir test && cd test && echo "a" > "some.file"
test$ echo '*'
*
test$ TEST=$(echo '*')
test$ echo $TEST
some.file
Почему второй вывод — это разрешение *
в (все) имена файлов, а не просто буквальный *
вывод? Похоже на ошибку в Bash?
Пробовал на Ubuntu 18.04, bash версии 4.4.19(1)-release. Ожидаю, что на других ОС будет то же самое.
решение1
Нет, это не ошибка. Вы показали, что
echo '*'
произведет литерал *
. Поэтому, когда вы подставляете этот вывод, как в следующей команде
TEST=$(echo '*')
он поместит *
в переменную $TEST
. Затем, когда вы
echo $TEST
glob будет расширяться здесь. Вы можете проверить это, запустив эту последнюю команду, изменив каталоги, а затем запустив ее снова.
Вы получите *
результат, если скажете
echo "$TEST"
как объясненоздесь, двойные кавычки позволяют расширять переменную, но не допускают расширения глобуса.