Вам потрібні лише export
змінні, які повинні "бачити" інші програми, які ви запускаєте в оболонці, тоді як ті, які використовуються лише всередині самої оболонки, не потрібно export
редагувати.
Про це говорить сторінка man:
The supplied names are marked for automatic export to the environ‐
ment of subsequently executed commands. If the -f option is given,
the names refer to functions. If no names are given, or if the -p
option is supplied, a list of all names that are exported in this
shell is printed. The -n option causes the export property to be
removed from each name. If a variable name is followed by =word,
the value of the variable is set to word. export returns an exit
status of 0 unless an invalid option is encountered, one of the
names is not a valid shell variable name, or -f is supplied with a
name that is not a function.
Це можна продемонструвати за допомогою наступного:
$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh
$ export MYVAR="value-exported"
$ ./echo.sh
value-exported
Пояснення:
- Я спершу встановив
${MYVAR}
змінну Shell за допомогою MYVAR="value"
. Використовуючи echo
я, я можу повторити його значення, оскільки ехо є частиною оболонки.
- Тоді я створюю
echo.sh
. Це маленький сценарій, який в основному робить те саме, він просто перегукується ${MYVAR}
, але різниця полягає в тому, що він буде працювати в іншому процесі, оскільки це окремий сценарій.
- При виклику
echo.sh
нічого не видає, тому що новий процес не успадковується${MYVAR}
- Потім я експортую
${MYVAR}
в своє середовище export
ключове слово
- Коли я
echo.sh
знову запускаю те саме , це повторюється за змістом, ${MYVAR}
оскільки він отримує його з оточення
Отже, щоб відповісти на ваше запитання:
Залежить, де буде використана змінна, чи потрібно її експортувати чи ні.