Так же, как в Perl есть личные переменные (my $x
) и переменные окружения ($ENV{Y}
), так и оболочка.
$ perl <<'.'
my $x = "x";
$ENV{Y}="Y";
system 'echo "<$x> <$Y>"';
.
<> <Y>
$ sh <<'.'
x=x
export Y=Y
perl -le'print "<$x> <$ENV{Y}>";'
.
<> <Y>
$ csh <<'.'
set x x
setenv Y Y
perl -le'print "<$x> <$ENV{Y}>";'
.
<> <Y>
Поддержка частных переменных - это хорошо, а не странновещь.
В вашем примере $HOST
- это переменная окружения (в верхнем регистре по соглашению), а $env
- приватная переменная (в нижнем регистре по договоренности).
sh
и bash
Эти оболочки используют один и тот же механизм для присваивания закрытым переменным и переменным среды.
Чтобы создать переменную окружения, вы переводите частную переменную в средуиспользуя export
.
VAR=val
export VAR
perl -e'...$ENV{VAR}...'
или
export VAR
VAR=val
perl -e'...$ENV{VAR}...'
Повышение и назначение могут быть объединены.
export VAR=val
perl -e'...$ENV{VAR}...'
Приведенные выше подходы изменяют среду оболочкии всех последующих детей он создает.Следующий подход может использоваться для изменения среды конкретного ребенка:
VAR=val perl -e'...$ENV{VAR}...'
Этот подход также может использоваться для эффективного продвижения закрытой переменной:
var=val
VAR="$var" perl -e'...$ENV{VAR}...'
csh
и tcsh
В этих оболочках используется различный синтаксис для установки частных переменных и переменных среды.
Для установки частной переменной используется set
.
set var val
Чтобы установить переменную среды, используется setenv
.
setenv VAR val
perl -e'...$ENV{VAR}...'
Приведенные выше подходы изменяют среду оболочки и всех последующих дочерних элементов, которые она создает.