Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum
Беспроводные выключатели nooLite

Lines Club

Ищем достойных соперников.

Книги по Linux (с отзывами читателей)

Библиотека сайта или "Мой Linux Documentation Project"

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. 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

Предыдущий раздел: Оглавление Следующий раздел:
Командный интерпретатор   Некоторые важные переменные


Средняя оценка 5 при 1 голосовавших
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют