Все переменные и их значения, которые известны команде перед выполнением, образуют ее оболочку (среду выполнения). Эта оболочка включает в себя переменные, которые команда получает "по наследству" от родительского процесса, и переменные, указанные как ключевые параметры в командной строке, которая запускает команду. Переменные, которые Shell передает дочернему процессу - это переменные, перечисленные как аргументы в команде export. Эта команда помещает указанные переменные в оболочки как самого Shell, так и всех его будущих дочерних процессов.
Ключевые параметры - это пары переменная-значение, которые появляются в форме присвоений, обычно перед именем процедуры в командной строке. Такие переменные помещаются в оболочку вызываемой процедуры. Например:
# keycommand
echo $a $b
Это пример простой процедуры, которая выводит значения двух переменных. Если ее вызвать следующим образом:
a=key1 b=key2 keycommand
то результирующий вывод будет:
key1 key2
Ключевые параметры не являются аргументами и не изменяют $#. Процедура имеет доступ к значению любой переменной в своей оболочке. Однако, даже если значение переменной было изменено, эти изменения не отражаются на параметрах Shell; они относятся только к конкретной процедуре. Для того, чтобы эти изменения были переданы в дочерние процессы данной процедуры, эти переменные должны быть перечислены в команде export в этой процедуре. Чтобы получить список переменных, которые являются передаваемыми из текущего интерпретатора Shell, введите:
export
Вы также получите список переменных, которые можно только считывать. Чтобы получить список пар имя-значение в текущей оболочке, введите:
printenv
или
env
Shell - это команда и она может быть вызвана также как и любая другая команда:
sh proc [arg...] Новая копия Shell вызывается для чтения proc.
sh -v proc [arg...] Это эквивалентно помещению "set -v" в начале proc. Также можно указывать флаги -x, -e, -u, -n.
proc [arg...] Если proc является выполняемым файлом, не скомпилированной программой, то эффект будет такой же, как от команды:
sh proc args
Преимущество такой формы записи заключается в том, что переменные, которые были экспортированы в оболочку, будут передаваться и в процессы, запускаемые из proc. Таким образом, любые изменения, произведенные в отношении передаваемых переменных внутри proc, будут распространяться на последующие команды, вызываемые из proc.