Что делает `set $ variable`?

Я знаю, что set используется для управления переменными среды, но я хочу убедиться, что эти изменения не постоянны, не так ли? Я имею в виду, что когда я закрываю оболочку и снова ее открываю, никаких изменений не будет сохранено, не так ли? И они не наследуются дочерними процессами, чтобы не использовать export Правильно ли?

Я имею в виду выражения типа

 set IFS ':' 

set управляет параметрами оболочки или позиционными параметрами. Из подсказки типа подсказки bash

Набор команд set IFS : установит $1="IFS" и $2=":" . Он не изменит значение переменной IFS.

Любые изменения параметров оболочки и позиционных параметров не сохраняются между сеансами bash. Для этого вам нужно изменить файлы запуска (.bashrc и др.).

set не используется для управления переменными окружающей среды, он используется для установки параметров оболочки. Подумайте об этом как о эквиваленте меню «Настройки». Таким образом, хотя некоторые из этих параметров могут повлиять на то, как bash обрабатывает переменные среды, он не имеет никакого отношения к их настройке.

В любом случае, если вы измените значение переменной следующим образом:

 foo='bar' 

Он будет изменен только для вашей текущей оболочки и не повлияет ни на что другое. Если вы используете экспорт, выполните следующие действия:

 export foo='bar' 

Он будет экспортирован в текущую оболочку, и все оболочки будут запущены из вашей текущей оболочки, но это все равно не повлияет на какие-либо оболочки, запущенные за пределами текущего сеанса оболочки. Проиллюстрировать:

 $ foo='bar' $ echo "$foo" bar $ bash ## start a new shell $ echo "$foo" $ 

Второе echo ничего не выводит, потому что переменная не экспортируется в новую оболочку. Если бы вы использовали export это было бы: \

 $ export foo='bar' $ bash $ echo "$foo" bar 

Другими словами, не только переменные изменения, подобные этому, не сохраняются после перезапуска, они даже не влияют на запуск каких-либо новых оболочек.