Что такое «(set -o posix; set) | меньше »делаешь? [дубликат]

Keep simple thing simple. Фильтр, предназначенный для перевода символов, - tr.

echo 1ude1UDE | tr [:upper:][:lower:] [:lower:][:upper:]
15
10.05.2017, 22:49
2 ответа

set показывает все переменные оболочки (экспортированные или нет). В Bash set -o posix переводит оболочку в режим совместимости с POSIX. (Я не знаю, имеют ли другие оболочки аналогичный синтаксис для аналогичной функции, но здесь я предполагаю Bash.)

Разница в этом случае состоит в том, что обычно Bash set показывает также функции оболочки, но в режиме POSIX set показывает только переменные и слегка меняет формат вывода:

  1. Когда встроенная функция set вызывается без параметров, она не отображает имена и определения функций оболочки.
  2. Когда встроенная функция set вызывается без параметров, она отображает значения переменных без кавычек, если они не содержат метасимволов оболочки, даже если результат содержит непечатаемые символы.

В Bash есть дополнительная declare встроенная функция, которую можно использовать для отображения всех остальных скрытых или специфичных для Bash флагов переменных: declare -p xx показывает переменную xx в формате, который Bash может использовать в качестве входных данных. declare -p показывает все переменные, а declare -f можно использовать для отображения функций.

14
27.01.2020, 19:50

В основном происходит две вещи: команды set вызываются в подоболочке, чтобы не испортить ваши текущие параметры оболочки, и эта подоболочка устанавливается в режим POSIX перед перечисление всех переменных. Процитируем руководство:

posix Измените поведение bash, где операция по умолчанию отличается от стандарта POSIX чтобы соответствовать стандарту (режим posix).См. ТАКЖЕ ниже для ссылка на документ в котором подробно описывается, как режим posix влияет на поведение bash.

Короче говоря, bash в режиме POSIX будет вести себя ближе к тому, что делает sh.

Что касается set без опций, он также есть в руководстве и фактически указывает причину, почему необходим режим POSIX:

set [+abefhkmnptuvxBCEHPT] [+o имя-опции] [аргумент ...] Без опций, имя и значение каждой переменной оболочки отображаются в формате которые можно повторно использовать в качестве входных данных для установки или сброса текущие установленные переменные. . . В режиме posix отображаются только переменные оболочки.

...в отличие от определений переменных и функций, что делается, когдаbash работает в обычном режиме.

Дополнительную информацию о режиме POSIX см. в этом.

6
27.01.2020, 19:50

Теги

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