
Обычно я работаю в bash в Linux, и если мне нужно экспортировать переменную, я могу написать:
export LC_ALL=C
Однако в последнее время я больше работаю с Solaris, и администраторы Solaris, с которыми я работаю, всегда пишут:
LC_ALL=C ; export LC_ALL
Есть ли причина предпочесть последнее первому?
Я предполагаю, что некоторые снаряды могут не распознавать первый вариант. Какие именно?
Спасибо.
решение1
Я считаю, что настоящий Bourne shell (/bin/sh на многих коммерческих вариантах Unix) не поддерживает назначение и экспорт в одном операторе. Так я это помню со времен Solaris.
Я не знаю, используют ли новые версии Solaris bash по умолчанию. Независимо от этого, ваш последний случай более переносим, поэтому я бы остановился на нем.
решение2
В Solaris /bin/sh требует двух операторов, тогда как /bin/bash вполне справляется с одним оператором. В Linux /bin/sh обычно является символической ссылкой на /bin/bash, поэтому разницы нет.
Если вы пишете скрипт, который может быть источником другого скрипта, то всегда используйте формат из двух операторов. Если скрипт не является или не будет источником, просто проверьте строку shebang в верхней части скрипта, чтобы узнать, какую оболочку вы используете. Многие скрипты Solaris используют /bin/sh, и это значение по умолчанию для многих программных пакетов. Поэтому большинство администраторов предпочитают более переносимый способ экспорта переменной.
решение3
Вы можете использовать первый вариант, если в основном работаете с bash, поскольку вы можете использовать bash в качестве оболочки root без каких-либо опасных побочных эффектов, начиная с Solaris 10. Если машина когда-либо перезагрузится в однопользовательский режим и не найдет bash, есть автоматический возврат к Bourne Shell.
решение4
Я работаю на Solaris 2.6, около 1998 года. Эта версия изначально поставлялась только с sh и csh. Используя sh, я вижу, что вам нужна упомянутая вами двухстрочная версия, чтобы увидеть правильный результат от env. Использую bash с sunfreeware.org, и он отлично работает с однострочной версией.