Почему большинство переменных Bash (Bash_versinfo, OldPww, HostType) возвращает «Команда не найдена»

Задал этот вопрос в списке рассылки systemd-devel и получил окончательный ответ от Леннарта. http://lists.freedesktop.org/archives/systemd-devel/2015-November/035043.html

Вставляю сюда ответ для потомков.

Нет, это не так. И я не считаю это достаточно сильным примером использования. чтобы сделать это чем-то родным.

Извините.

Lennart

-- Lennart Poettering, Red Hat

0
06.09.2018, 04:15
2 ответа

Вы вводите переменную напрямую, а затем оболочка интерпретирует то, что вы ввели как команду, и ищет записи в вашей переменной $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, как описано здесь).

4
28.01.2020, 02:16
pwd

— это команда, как и

echo $BASH

где как

BASH

не

1
28.01.2020, 02:16

Теги

Похожие вопросы