Назад | Перейти на главную страницу

Как мне экспортировать переменную оболочки в bash?

Обычно я работаю в bash в Linux, и если мне нужно экспортировать переменную, я могу написать:

export LC_ALL=C

Однако в наши дни я выполняю больше работы с Solaris, и администратор Solaris, с которым я работаю, всегда будет писать:

LC_ALL=C ; export LC_ALL

Есть ли причина предпочесть последнее первому?

Я предполагаю, что первые могут не распознаваться некоторыми снарядами. Какие?

Спасибо.

Я считаю, что настоящая оболочка Борна (/ bin / sh во многих коммерческих вариантах Unix) не поддерживает присвоение и экспорт в одном операторе. Так я помню с тех пор, как работал с Solaris.

Я не знаю, используют ли сейчас новые версии Solaris по умолчанию bash. Тем не менее, ваш последний чехол более портативный, поэтому я буду придерживаться его.

В Solaris / bin / sh требует наличия двух операторов, тогда как / bin / bash подходит для одного оператора. В Linux / bin / sh обычно является символической ссылкой на / bin / bash, поэтому разницы нет.

Если вы пишете сценарий, который может быть получен из другого сценария, всегда используйте формат двух операторов. Если сценарий отсутствует или не будет получен, просто проверьте строку shebang в верхней части сценария, чтобы узнать, какую оболочку вы используете. Многие сценарии Solaris используют / bin / sh, и это значение по умолчанию для многих программных пакетов. Таким образом, большинство администраторов предпочитают более переносимый способ экспорта переменной.

Вы можете использовать первый, если вы в основном работаете над bash, поскольку вы можете использовать bash как корневую оболочку без каких-либо опасных побочных эффектов, начиная с Solaris 10. Если машине когда-либо придется перезагружаться в однопользовательском режиме, и вы не найдете bash, то есть автоматический откат к Bourne Shell.

Любая современная оболочка, производная от Борна, о которой я знаю, поддерживает универсальную форму. Я думаю, что более старые версии исходной оболочки Bourne могут потребовать отдельной версии.

Я работаю над Solaris 2.6, около 1998 года. Эта версия изначально поставлялась только с sh и csh. Используя sh, я вижу, что вам нужна указанная вами двухстрочная версия, чтобы увидеть правильный результат от env. Использование bash от sunfreeware.org, и он отлично работает с однострочной версией.

В оболочке Posix «наборный» может объявлять переменную, устанавливать значение и экспортировать в «единственном» выражении.

typeset -x foo=bar

Это поведение применяется к Posix Shell и Korn Shell.