Обычно я работаю в 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.