Где “экспорт var=value” не доступный?

NetworkManager имеет свое собственное место для рычагов в /etc/NetworkManager/dispatcher.d/. Сценарии там называют каждый раз, когда интерфейс изменяет состояние, см. страницу справочника NetworkManager для всех окровавленных деталей.

31
28.03.2015, 17:56
2 ответа
export foo=bar

не поддерживался оболочкой Bourne (старая оболочка 70-х годов, от которой происходят современные реализации sh , такие как ash / bash / ksh / yash / zsh) . Это было введено ksh .

В оболочке Bourne вы бы сделали:

foo=bar export foo

или:

foo=bar; export foo

или с set -k :

export foo foo=bar

Теперь поведение:

export foo=bar

варьируется от оболочки к оболочке .

Проблема в том, что присваивания и простые аргументы команды анализируются и интерпретируются по-разному.

foo = bar выше интерпретируется некоторыми оболочками как аргумент команды, а другими - как присваивание (иногда).

Например,

a='b c'
export d=$a

интерпретируется как:

'export' 'd=b' 'c'

с некоторыми оболочками ( ash , более старые версии zsh (в эмуляции sh), yash ]) и:

'export' 'd=b c'

в других ( bash , ksh ).

Хотя

export \d=$a

или

var=d
export $var=$a

будут интерпретироваться одинаково во всех оболочках (как 'export' 'd = b' 'c' ), потому что обратная косая черта или знак доллара останавливают те оболочки, которые поддерживают это рассматривать эти аргументы как уступки.

Если цитируется сам экспорт или результат некоторого расширения (даже частично), в зависимости от оболочки, он также перестанет получать особую обработку.

См. « Нужны ли кавычки для присвоения локальной переменной? » для получения более подробной информации.

Синтаксис Bourne:

d=$a; export d

интерпретируется одинаково всеми оболочками без двусмысленности ( d = $ a export d также будет работать в оболочке Bourne и оболочках, совместимых с POSIX, но не в последних версиях zsh , если не используется эмуляция sh ).

Все может быть намного хуже. См., Например, недавнее обсуждение bash , когда задействованы массивы.

(ИМО, было ошибкой вводить эту функцию ).

20
27.01.2020, 19:38

Это не басизм, а позы, не соответствующий синтаксисом. На самом деле он на самом деле начался как кшизм довольно давно и был позже был принят практически во всех оболочках Bourne Syntax. Единственным пресловутым исключением является / BIN / SH на Solaris 10 и старше, которое прилипает к устаревшему синтаксису оболочки Bourne. Надеюсь, SOLARIS 11 использует SCOLL, совместимую POSIX как / Bin / Sh .

Кстати, Экспорт был уже встроенную команду в устаревшей оболочке Bourne, настолько гудящую для экспорта: не найдено не найдено

Вот наследие поведение оболочки Bourne, когда экспортируется в сочетании с воздействием:

$ export var=22
var=22: is not an identifier

для ностальгии исходный код этого Оригинал Bourne Shell Доступен и может быть скомпилирован для большинства дистрибутивов Unix и Linux.

28
27.01.2020, 19:38

Теги

Похожие вопросы