Intereting Posts
Могу ли я подключаться к Интернету с помощью одного ПК и передавать через LAN (коммутатор) интернет на другой компьютер? тайм-аут awk изменит следующую строку после сопоставления шаблона, основанного на другом совпадении шаблонов Как безопасно отключить сетевой ресурс на Linux STB без сбоев (я получаю GSOD)? Где находятся скрипты инициализации SSH? Установка Linux Mint на Windows-Ubuntu с двойной загрузкой не удалось установить kde-nm-connection-editor на элементарной ОС Luna Какая история за вилкой? Невозможно скомпилировать, отсутствует libncurses5-dev Доступ к другому компьютеру в сети Исправление ядра для загрузки без initrd OpenSUSE 13.1 Не удается найти загрузочное устройство после обновления Почему UNIX / Linux предоставляет несколько терминалов? Bash globbing: как выражать "что-то – *. Txt кроме * -foobar.txt" как glob? Fedora 23: «обновление dnf» застряло в «Выполнение транзакции»

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

Я нашел список многих переменных BASH, https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html.

Описание говорит,

Эти переменные устанавливаются или используются Bash, но другие оболочки обычно не обрабатывают их специально.

И первая переменная,

BASH: полный путь, используемый для выполнения текущего экземпляра Bash.

но когда я BASH в моем терминале, я получаю bash: BASH: command not found

Я могу подтвердить от echo $0 что я использую bash .

Точно так же, когда я запускаю BASH_VERSINFO я получаю тот же вывод, даже если в описании команды сказано:

Доступная только для чтения переменная массива (см. Массивы), члены которой содержат информацию о версии для этого экземпляра Bash. Значения, назначенные членам массива, следующие:

BASH_VERSINFO [0] Основной номер версии (релиз).

BASH_VERSINFO [1] Дополнительный номер версии (версия).

BASH_VERSINFO [2] Уровень патча.

BASH_VERSINFO [3] Версия сборки.

BASH_VERSINFO [4] Статус релиза (например, бета1).

BASH_VERSINFO [5] Значение MACHTYPE.

Некоторые переменные, такие как hostname , хотя pwd работает

Вы вводите переменную напрямую, а shell интерпретирует введенную вами команду и ищет в записях переменной $ PATH команду с тем же именем. Поскольку в вашем $ PATH нет записей с именами BASH и BASH_VERSINFO, вы получили сообщение об ошибке «команда не найдена». pwd другой стороны, 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. В общем, вы должны заключать переменные (включая массивы) в двойные кавычки, чтобы избежать нежелательного поведения (пропуск кавычек эквивалентен оператору split-glob, как описано здесь )

 pwd 

это команда, как есть

 echo $BASH 

в то время как

 BASH 

не является