0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>Bash-переменные Linux предполагают два способа определения переменной оболочки - с командой export и без нее. Это важный момент - добавление этой команды меняет область действия переменной. В этой статье разберем различия между определением переменной оболочки с export и без, а также рассмотрим варианты использования export и его параметры.</strong></p>
1
<p><strong>Bash-переменные Linux предполагают два способа определения переменной оболочки - с командой export и без нее. Это важный момент - добавление этой команды меняет область действия переменной. В этой статье разберем различия между определением переменной оболочки с export и без, а также рассмотрим варианты использования export и его параметры.</strong></p>
2
<p><em>Это адаптированный перевод статьи<a>Defining a Bash Variable With or Without ‘export’</a>из блога образовательного проекта Baeldung.</em></p>
2
<p><em>Это адаптированный перевод статьи<a>Defining a Bash Variable With or Without ‘export’</a>из блога образовательного проекта Baeldung.</em></p>
3
<blockquote><p>С одной стороны, Bash - самый популярный командный интерпретатор в юниксоподобных системах, особенно в GNU/Linux. С другой - скриптовый язык программирования со своим синтаксисом и особенностями.</p>
3
<blockquote><p>С одной стороны, Bash - самый популярный командный интерпретатор в юниксоподобных системах, особенно в GNU/Linux. С другой - скриптовый язык программирования со своим синтаксисом и особенностями.</p>
4
</blockquote><h2>Содержание</h2>
4
</blockquote><h2>Содержание</h2>
5
<ul><li><a>Определение переменной с export и без</a></li>
5
<ul><li><a>Определение переменной с export и без</a></li>
6
<li><a>Когда стоит использовать export, а когда<em>-</em>нет</a></li>
6
<li><a>Когда стоит использовать export, а когда<em>-</em>нет</a></li>
7
<li><a>Как использовать export</a></li>
7
<li><a>Как использовать export</a></li>
8
<li><a>Как связаны родительская и дочерние оболочки</a></li>
8
<li><a>Как связаны родительская и дочерние оболочки</a></li>
9
<li><a>Заключение</a></li>
9
<li><a>Заключение</a></li>
10
</ul><h2>Определение переменной с export и без</h2>
10
</ul><h2>Определение переменной с export и без</h2>
11
<p>Переменные Bash похожи на переменные в Java или C++, но с одним существенным отличием: они не нуждаются в объявлении. Переменную создает присвоение ее имени значения. Например, так:</p>
11
<p>Переменные Bash похожи на переменные в Java или C++, но с одним существенным отличием: они не нуждаются в объявлении. Переменную создает присвоение ее имени значения. Например, так:</p>
12
<p>В первом случае создается переменная оболочки с именем MYVAR, которой присваивается значение 1729. Во втором определение переменной происходит точно также, но с помощью export. Эта команда отмечает переменную для экспорта во все дочерние процессы, которые созданы внутри оболочки и делают ее переменной окружения.</p>
12
<p>В первом случае создается переменная оболочки с именем MYVAR, которой присваивается значение 1729. Во втором определение переменной происходит точно также, но с помощью export. Эта команда отмечает переменную для экспорта во все дочерние процессы, которые созданы внутри оболочки и делают ее переменной окружения.</p>
13
<p>Основное различие между этими двумя способами определения переменной заключается в том, что export делает переменную доступной для всех следующих команд, которые выполняются в этой оболочке. Команда export помечает MYVAR для автоматического экспорта в среду дочерних процессов, которые создаются такими командами:</p>
13
<p>Основное различие между этими двумя способами определения переменной заключается в том, что export делает переменную доступной для всех следующих команд, которые выполняются в этой оболочке. Команда export помечает MYVAR для автоматического экспорта в среду дочерних процессов, которые создаются такими командами:</p>
14
<p>Если переменная задана без использования export, то она будет доступна только внутри оболочки. Другими словами, дочерние оболочки, процесс или команды вне ее не получат доступа к ней:</p>
14
<p>Если переменная задана без использования export, то она будет доступна только внутри оболочки. Другими словами, дочерние оболочки, процесс или команды вне ее не получат доступа к ней:</p>
15
<p>Отличия переменных в Bash от переменных в других языках программирования заключаются в следующем:</p>
15
<p>Отличия переменных в Bash от переменных в других языках программирования заключаются в следующем:</p>
16
<ul><li>Переменные оболочки (определенные без экспорта) подобны локальным переменным. Доступ к ним можно получить только внутри этой оболочки.</li>
16
<ul><li>Переменные оболочки (определенные без экспорта) подобны локальным переменным. Доступ к ним можно получить только внутри этой оболочки.</li>
17
<li>Переменные окружения (определенные с помощью экспорта) подобны глобальным переменным. Доступ к ним могут получить как в родительской оболочке, так и во всех дочерних оболочках, процессах и командах.</li>
17
<li>Переменные окружения (определенные с помощью экспорта) подобны глобальным переменным. Доступ к ним могут получить как в родительской оболочке, так и во всех дочерних оболочках, процессах и командах.</li>
18
</ul><p>Однако между глобальными переменными в Bash и других языках программирования существует важное различие. Родительская оболочка может экспортировать свои переменные в среду дочерней оболочки, но дочерняя оболочка не может экспортировать переменные обратно в родительскую.</p>
18
</ul><p>Однако между глобальными переменными в Bash и других языках программирования существует важное различие. Родительская оболочка может экспортировать свои переменные в среду дочерней оболочки, но дочерняя оболочка не может экспортировать переменные обратно в родительскую.</p>
19
<h2>Когда стоит использовать export, а когда<em>-</em>нет</h2>
19
<h2>Когда стоит использовать export, а когда<em>-</em>нет</h2>
20
<p>Переменные окружения следует использовать в случае, когда нужно экспортировать переменные и сделать их доступными для следующих команд и процессов. Обычно это происходит, когда среду нужно использовать вместе с дочерними процессами, например:</p>
20
<p>Переменные окружения следует использовать в случае, когда нужно экспортировать переменные и сделать их доступными для следующих команд и процессов. Обычно это происходит, когда среду нужно использовать вместе с дочерними процессами, например:</p>
21
<ul><li>При настройке среды дочернего процесса или оболочки</li>
21
<ul><li>При настройке среды дочернего процесса или оболочки</li>
22
<li>При определении переменной, которую будет использовать сценарий bash, выполняемый из родительской оболочки</li>
22
<li>При определении переменной, которую будет использовать сценарий bash, выполняемый из родительской оболочки</li>
23
<li>При настройке переменных окружения для терминальных мультиплексоров (например, screen или tmux)</li>
23
<li>При настройке переменных окружения для терминальных мультиплексоров (например, screen или tmux)</li>
24
<li>При настройке среды сборки для сценариев и инструментов сборки</li>
24
<li>При настройке среды сборки для сценариев и инструментов сборки</li>
25
</ul><p>Переменные оболочки стоит использовать в случаях, когда они должны существовать только в родительской оболочке. Например, к ним относятся:</p>
25
</ul><p>Переменные оболочки стоит использовать в случаях, когда они должны существовать только в родительской оболочке. Например, к ним относятся:</p>
26
<ul><li>Переменные счетчика циклов</li>
26
<ul><li>Переменные счетчика циклов</li>
27
<li>Временные переменные</li>
27
<li>Временные переменные</li>
28
</ul><h2>Как использовать export</h2>
28
</ul><h2>Как использовать export</h2>
29
<p>Подробнее рассмотрим команду export и связанные с ней команды, которые часто используются с переменными окружения и оболочки.</p>
29
<p>Подробнее рассмотрим команду export и связанные с ней команды, которые часто используются с переменными окружения и оболочки.</p>
30
<h3>Экспорт функции</h3>
30
<h3>Экспорт функции</h3>
31
<p>export может экспортировать не только переменные, но и функции. Для этого нужно использовать опцию командной строки export -f. Стоит отметить, что функции будут доступны и в дочерних оболочках и процессах:</p>
31
<p>export может экспортировать не только переменные, но и функции. Для этого нужно использовать опцию командной строки export -f. Стоит отметить, что функции будут доступны и в дочерних оболочках и процессах:</p>
32
<h3>Удаление переменной</h3>
32
<h3>Удаление переменной</h3>
33
<p>Переменные окружения автоматически экспортируются во все дочерние оболочки, а также в их дочерние оболочки. Для удаления автоматически унаследованной переменной существует команда export -n:</p>
33
<p>Переменные окружения автоматически экспортируются во все дочерние оболочки, а также в их дочерние оболочки. Для удаления автоматически унаследованной переменной существует команда export -n:</p>
34
<h3>Список всех экспортированных переменных</h3>
34
<h3>Список всех экспортированных переменных</h3>
35
<p>Для получения списка всех переменных и функций, экспортированных в текущую оболочку, используется команда export -p:</p>
35
<p>Для получения списка всех переменных и функций, экспортированных в текущую оболочку, используется команда export -p:</p>
36
<p>Эта команда помогает проверить, что все переменные оболочки экспортированы правильно.</p>
36
<p>Эта команда помогает проверить, что все переменные оболочки экспортированы правильно.</p>
37
<h3>Автоматический экспорт всех переменных</h3>
37
<h3>Автоматический экспорт всех переменных</h3>
38
<p>Для автоматического экспорта всех переменных, определенных в текущей оболочке, существует опция all export. Ее можно включать или отключать, используя команду set:</p>
38
<p>Для автоматического экспорта всех переменных, определенных в текущей оболочке, существует опция all export. Ее можно включать или отключать, используя команду set:</p>
39
<p>Эту команду полезно включать перед вызовом сценария Bash, который определяет множество переменных без команды экспорта.</p>
39
<p>Эту команду полезно включать перед вызовом сценария Bash, который определяет множество переменных без команды экспорта.</p>
40
<h2>Как связаны родительская и дочерние оболочки</h2>
40
<h2>Как связаны родительская и дочерние оболочки</h2>
41
<p>У передачи переменной окружения между родительской и дочерними оболочками существует определенная иерархия:</p>
41
<p>У передачи переменной окружения между родительской и дочерними оболочками существует определенная иерархия:</p>
42
<h3>Сценарии и export</h3>
42
<h3>Сценарии и export</h3>
43
<p>При создании сценария, вызываемого из командной оболочки и содержащего команду export, нужно проверить соответствие результата экспорта ожидаемому. Для этого есть несколько способов.</p>
43
<p>При создании сценария, вызываемого из командной оболочки и содержащего команду export, нужно проверить соответствие результата экспорта ожидаемому. Для этого есть несколько способов.</p>
44
<h3>Export во время выполнения скрипта</h3>
44
<h3>Export во время выполнения скрипта</h3>
45
<p>Выполнение сценария с командой export из командной оболочки происходит в дочерней оболочке. Это означает, что любые переменные, экспортируемые сценарием, будут доступны только его дочерним оболочкам, но не родительской. Когда выполнение сценария завершится, экспортированные переменные исчезнут из среды:</p>
45
<p>Выполнение сценария с командой export из командной оболочки происходит в дочерней оболочке. Это означает, что любые переменные, экспортируемые сценарием, будут доступны только его дочерним оболочкам, но не родительской. Когда выполнение сценария завершится, экспортированные переменные исчезнут из среды:</p>
46
<h3>Экспорт переменной в родительскую оболочку</h3>
46
<h3>Экспорт переменной в родительскую оболочку</h3>
47
<p>Если при выполнении сценария необходимо экспортировать переменную окружения в родительскую оболочку, можно использовать команду source. Она позволяет выполнить сценарий в текущей среде без создания дочерней оболочки.</p>
47
<p>Если при выполнении сценария необходимо экспортировать переменную окружения в родительскую оболочку, можно использовать команду source. Она позволяет выполнить сценарий в текущей среде без создания дочерней оболочки.</p>
48
<h2>Заключение</h2>
48
<h2>Заключение</h2>
49
<p>Команда export помогает экспортировать переменные окружения так, чтобы они были доступны во всех дочерних процессах, оболочках и командах. Кроме того, различные параметры командной строки export и других связанных команд предоставляют различные способы определения, экспорта и использования переменных в разных оболочках и сценариях.</p>
49
<p>Команда export помогает экспортировать переменные окружения так, чтобы они были доступны во всех дочерних процессах, оболочках и командах. Кроме того, различные параметры командной строки export и других связанных команд предоставляют различные способы определения, экспорта и использования переменных в разных оболочках и сценариях.</p>