По какой-то причине у этого модема была ссылка на eth1
, поэтому мне удалось заставить его работать с помощью следующих команд:
# ifconfig eth0 down
# ifconfig eth1 up
# dhcpcd
Переменные оболочки хранятся в памяти запущенной оболочки. Используйте любую структуру данных, которая позволяет легко находить элемент по его имени; хеш-таблица - хороший выбор.
Разница между переменными оболочки и переменными среды заключается в том, что переменные среды помещаются в среду подпроцессов. Все переменные среды являются переменными оболочки. Естественный способ их хранения - создать хеш-таблицу, которая отображает имена переменных не в значение, а в структуру, содержащую значение и некоторые флаги (экспортируемые, только для чтения,…).
Это переменная только на время выполнения программы. Другой способ подумать об этом - переписать вашу программу следующим образом.
#!/bin/bash
b=1
echo $b
exit
Теперь представьте, что вы делаете это в терминале, а затем выходите из терминальной сессии. Открытие другого терминального сеанса не покажет вам ничего относительно того b=1
присвоения в предыдущем сеансе.
Это называется "локальная переменная", в отличие от "глобальной переменной". Они отображаются, наряду со многими другими функциями, с помощью set
.
Итак, если вы хотите увидеть назначение, сделайте
set |grep '^b='
b=1
Пожалуйста, обратитесь к The Linux Documentation Project за дополнительной информацией.
Оболочка, запускаемая при входе в систему для чтения ваших команд и их выполнения, сохраняет все переменные. Если вы запустите вторую оболочку, у нее будет собственный набор переменных. Вы можете запустить команду set
, чтобы увидеть список переменных. Команда set
выполняется внутри оболочки вместо запуска нового процесса.
Переменные среды либо хранятся в отдельном пространстве, либо помечаются как таковые (если это имеет значение, прочтите исходный код оболочки), поэтому они передаются программам, запускаемым оболочкой.
Мне кажется разумным использование двух хэш-таблиц.