Существует ряд вариантов для рассмотрения:
Просто выполнение FOO=bar
создает переменную с именем FOO
со значением bar
, но эта переменная не передается новым процессам:
$ echo $FOO
$ FOO=bar
$ echo $FOO
bar
$ bash # Start a new bash process
$ echo $FOO
# Variable is not set in the new process
$ exit # Exit new bash process
Запуск FOO=bar <command>
запустит данную команду с набором переменных (, но не повлияет на исходную среду оболочки):
$ echo $foo
$ FOO=baz bash # start a new bash process
$ echo $FOO
baz
$ exit # exit the new bash process
exit
$ echo $FOO
# No FOO in the original bash process
$
Выполнение FOO=foo; <command>
эквивалентно (1 ); помещение точки с запятой между двумя командами эквивалентно запуску этих двух команд в двух отдельных строках:
$ FOO=foo; echo $FOO
foo
$ bash
$ echo $FOO
$ exit
exit
$ echo $FOO
foo
$
Использование export
приведет к передаче переменной в среде оболочки вновь -созданным процессам:
$ export FOO=bar
$ echo $FOO # Value set in original shell
bar
$ bash # Start another shell
$ echo $FOO
bar # Value was passed along to new process
$ exit
exit