Задал этот вопрос в списке рассылки systemd-devel и получил окончательный ответ от Леннарта. http://lists.freedesktop.org/archives/systemd-devel/2015-November/035043.html
Вставляю сюда ответ для потомков.
Нет, это не так. И я не считаю это достаточно сильным примером использования. чтобы сделать это чем-то родным.
Извините.
Lennart
-- Lennart Poettering, Red Hat
Вы вводите переменную напрямую, а затем оболочка интерпретирует то, что вы ввели как команду, и ищет записи в вашей переменной $PATH для команды с таким же именем. Поскольку в вашем $PATH нет записей с именем BASH и BASH _VERSINFO, вы получили сообщение об ошибке «команда не найдена». pwd
и hostname
, с другой стороны, являются допустимыми командами, как вы обнаружили.
Вместо этого вы должны ввести команду для печати переменных (, как правило, echo
или printf
, обе оболочки встроены -в ), и предоставить переменную, которую вы хотите проверить, в качестве аргумента команды. Обратите внимание, что имена команд часто полностью состоят из строчных букв, а переменные среды оболочки часто состоят только из прописных букв.
Чтобы отобразить значения переменных, которые вы упомянули, попробуйте что-то вроде следующего:
$ echo "$BASH"
/bin/bash
$ for i in {0..4}; do printf "%d\t%s\n" "$i" "${BASH_VERSINFO[$i]}"; done
0 4
1 4
2 12
3 1
4 release
Для печати переменных массива используется синтаксис «${ARR _NAME[$index]}». Индексы Bash основаны на 0 -. В общем, вы должны инкапсулировать переменные (, включая массивы ), в двойные кавычки, чтобы избежать нежелательного поведения (пропуск кавычек эквивалентен оператору разделения -glob, как описано здесь).