× К оглавлению На главную Об авторе

   Дата и время публикации:
Дата и время модификации:

Определения и сравнения


1. Определения

В командной оболочке SHELL существуют две встроенные команды разным set и export

Примечание. Под SHELL понимается DASH (Debian Almquist shell) современный удовлетворяющий требованиям POSIX исполнение /bin/sh (он же – sh, Bourne shell). DASH является достаточно простой командной оболочкой, в ядре которой находятся функциональность, реализованная согласно требованиям POSIX 1003.2 и 1003.2a, и многие полезные функций из Korn shell, при этом не являясь его клоном, а так же несколько расширений Беркли (англ.Berkeley extensions).

1.1 Команда export

Встроенная команда export позволяет устанавливать имя переменной в ниже следующих последовательностей команд после её использования, как показано в дампе 1.1

Дамп 1.1.1

 
   ...
 export name=value
   ...

или функции, как показано в дампе 1.1.2

Дамп 1.1.2

 
func(){
   ...
}
   ...
 export -f func
   ...

Для прекращения действия переменной SHELL объявленной командой export в текущей подчиненной последовательности только использование команды unset, как показано в дампе 1.1.3 (для переменной)

Дамп 1.1.3

 
   ...
# явное прекращение действия переменной name 
unset -v name

и 1.1.4 (для функции).

Дамп 1.1.4

 
   ...
# явное прекращение действия функции func 
unset -f  funct

1.2 Команда set

Команда set перечисляет значение всех переменных SHELL, если вызывается без аргументов, как показано в дамп 1.2.1

Дамп 1.2.1

 
   ...
set  [{-option | +option}] [--] shell_args
   ...

Команда set используется для установки функциональных атрибутов командного интерпретатора. При этом их набор в DASH(1) и BASH(1) может разница, поэтому справляйтесь об их перечне с помощью опции -o, которая выводит весь их доступный перечень.

Соответственно, -option устанавливает атрибут, а +option отменяет его действие . Конец списка опций задается традиционно с [--], а список устанавливаемых агрументов SHELL в shell_args, разделяя их через пробел.

2.Cравнения

2.1. Команда export

Как было уже сказано выше, команда export объявляет переменную от начала (родительского) и до конца, в глубь наследуемых(дочерних) процессов, как показано ниже в дампе 2.1.1

Дамп 2.1.1

$ foo=bar ; export  foo; echo $foo; /bin/sh -c 'echo "$foo"'
bar
bar
$_

Соответственно, после выдачи команды exit(1) повторного запуска SHELL, увидим следующее в листинге 2.1.2

Дамп 2.1.2

$ echo $foo; sh -c 'echo "$foo"'


$_

2.2. Команда set

В тоже время, команда set, с другой стороны устанавливает атрибуты самой командной оболочки, как например символьно-позиционный параметр (англ. literal positional parameter), как показано в листинге 2.2.1

Дамп 2.2.1

$ set foo=baz  foo1=baz1; echo $1; echo $foo
foo=baz
bar

При этом необходимо помнить, что baz не назначается foo, а является просто символьно-позиционным параметром и не более. Кроме того, как уже было указано выше, команда set перечисляет установленные атрибуты командной облочки (через опции) и символьно-позиционный параметры.

Примечание. Ниже показан, пример общего использования set c установкой функции трассировки и изменения опций используемого командного интерпретатора DASH(1).
    
/bin/sh -c 'set -x ; set foo=bar foo1=bar1; echo "$# args: [$0] [$1] [$2]"; set +x'
+ set foo=bar foo1=bar1
+ echo 2 : [/bin/sh] [foo=bar] [foo1=bar1]
2 args: [/bin/sh] [foo=bar] [foo1=bar1]
+ set +x
   
   
Как только что было показано, команда set используется для установки отладки и некоего списка параметров, который "загружается" в аргументы командной строки используемого командного интерпретатора. В данном случае используется /bin/sh, имя (или абсолютный) путь которого указан в 0-й позиции списка. При этом в устанавливается опция -x, включающая трассировку интерпретирумых переменных, команд и функций, именуюемую xtrace. Соответственно, опция +x в конце её отключает. Для получения более подробных сведений об используемых опциях выполните, как показано ниже
    
$ help set    
   
   

2.3 Так в чем различие?

А в том, что команды export и set являются двумя диаметрально портивоположными командами, служащих для объявления разного типа:

Первая, команда export оперирует переменными и функциями, в то время как, вторая, команда set устанавливает функциональные атрибуты и символьно-позиционные параметров самой SHELL.

3. Библиография

3.1 What do the bash builtins set and export do?

3.2 Command Set

3.3 Linux man page set(1)

3.4 Debian Almquist Shell

3.5 Linux man page dash(1)