Библиотека сайта rus-linux.net
Цилюрик О.И. Linux-инструменты для Windows-программистов | ||
Назад | Переменные окружения | Вперед |
Переменные окружения
Переменные окружения (environment) известны из разных операционных систем. Особенностью их здесь есть только их запись: переменные окружения указываются в формате:
- L-value (объявление, присвоение) : NAME
- R-value (извлечение значения) : $NAME
Сравните запись одной и той же переменной в двух разных контекстах:>
$ XXX=123
$ echo $XXX
123
В записи команд интерпретатора не следует вставлять пробел до/после знака присвоения: это приводит к ошибкам.
Примечание: Вот такое простое определение переменной или нового ей значения
является локальным и не будет наследоваться последующими запущенными
программами. Для того, чтобы сделать его глобальным, используется
внутренняя команда export
, о чём будет подробно далее.
Многие правила синтаксиса, оперирующего
с переменными окружения, неявно вытекают из общих правил синтаксиса
интерпретатора bash
, но не лишне показать итого этих правил явно, из-за частоты
оперирования с переменными окружения...
Имена большинства переменных окружения записывают большими литерами. Но это только традиция и ничего более. Значением любой переменной окружения (после формирования и присвоения ей этого значения) всегда является текстовая строка (ещё один факт приверженности UNIX символьным представлениям), которая может содержать любые символы, и которая далее самим интерпретатором никак не интерпретируется: значение переменной возвращается запрашивающей программе, которая сама уже знает, как ей разбираться с этим значением.
Если значение для переменной может вызвать синтаксические недоразумения (значение, содержащее спецсимволы, разделительные пробелы и подобное), то такое значение заключается в литеральные кавычки (одиночные или двойные):
$ XXX='это составное значение'
$ echo $XXX
это составное значение
$ XXX="это ещё одно составное значение"
$ echo $XXX
это ещё одно составное значение
$ XXX="литерал включающий '"
$ echo $XXX
литерал включающий '
Символы со специальным смыслом могут экранироваться (предшествующим '\', снимающим специальный смысл с символа):
$ XXX="экранируется \$ символ"
$ echo $XXX
экранируется $ символ
Ещё одной особенностью UNIX нотации есть то, что списки значений (например, путевых имён) в качестве переменных окружения записываются через двоеточие (':') в качестве разделителя отдельных значений в списке:
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/olej/bin
Переменным окружения могут быть присвоены не только константные значения (явно записанные в
присвоении), но и результат выполнения команд (их традиционный вывод в SYSOUT
) и
целых командных скриптов:
$ pwd
/etc
$ CDIR=`pwd`
$ echo $CDIR
/etc
Примечание: Неудачи в попытках воспроизведения такой команды часто связаны с тем вопросом, какую литеральную кавычку использовать в записи команды (их много на клавиатуре с подобным начертанием)? В данном случае нужен тот символ, который находится на клавише '~'/'Ё' (под Esc).
Это был показан «старый стиль» записи команды в качестве значения. Существует альтернативная форма, но это только специфическое расширение bash:
$CDIR=$(pwd)
При определении нового значения для переменной могут использоваться значения уже ранее определённых переменных, в том числе и ранее установленное значение самой этой переменной, несколько примеров тому:
$ XXX=123
$ XXX=$XXX:456
$ echo $XXX
123:456
$ echo $XXX
123
$ XXX=AB${XXX}ab
$ echo $XXX
AB123ab
- здесь потребовалось выделить ({...}
) имя
переменной, чтобы вычленить его из конкатенируемой последовательности символов.
Посмотреть текущее содержимое окружения можно разнообразными способами и в разных форматах и последовательности:
$ export declare -x COLORTERM="gnome-terminal" ... declare -x TERM="xterm" declare -x USER="olej" ... $ env ORBIT_SOCKETDIR=/tmp/orbit-olej HOSTNAME=notebook.localdomain IMSETTINGS_INTEGRATE_DESKTOP=yes SHELL=/bin/bash TERM=xterm ... USERNAME=olej ... CLASSPATH=. DISPLAY=:0 ... $ set BASH=/bin/bash BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() ...
Вообще то, чаще бывает нужно не только определить
новую переменную (или присвоить переменной новое значение), но и
обеспечить её экспортирование в среду следующих выполняющихся
команд. Это делается по-разному в зависимости от вида используемого
командного интерпретатора. В интерпретаторе bash
встроенная команда export
помечает имена переменных для автоматического экспортирования в среду
следующих выполняемых команд. Именно такое определение (а не простое
присвоение значения) является основной практикой управления
переменными окружения. Вот как могут выглядеть альтернативные
варианты добавления текущего каталога (или любого другого) в список
путей переменной PATH:
$ PATH=./:$PATH
$ export PATH
Или:
$ PATH=./:$PATH ; export PATH
Или просто:
$ export PATH=./:$PATH
$ echo $PATH
./:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/olej/bin
Примечание: Обратите внимание, что вот предыдущая запись и следующая запись будут иметь совершенно разный эффект:
$ export PATH=`pwd`:$PATH
Предыдущий раздел: | Оглавление | Следующий раздел: |
Командный интерпретатор | Некоторые важные переменные |