Keep simple thing simple. Фильтр, предназначенный для перевода символов, - tr
.
echo 1ude1UDE | tr [:upper:][:lower:] [:lower:][:upper:]
set
показывает все переменные оболочки (экспортированные или нет). В Bash set -o posix
переводит оболочку в режим совместимости с POSIX. (Я не знаю, имеют ли другие оболочки аналогичный синтаксис для аналогичной функции, но здесь я предполагаю Bash.)
Разница в этом случае состоит в том, что обычно Bash set
показывает также функции оболочки, но в режиме POSIX set
показывает только переменные и слегка меняет формат вывода:
- Когда встроенная функция set вызывается без параметров, она не отображает имена и определения функций оболочки.
- Когда встроенная функция set вызывается без параметров, она отображает значения переменных без кавычек, если они не содержат метасимволов оболочки, даже если результат содержит непечатаемые символы.
В Bash есть дополнительная declare
встроенная функция, которую можно использовать для отображения всех остальных скрытых или специфичных для Bash флагов переменных: declare -p xx
показывает переменную xx
в формате, который Bash может использовать в качестве входных данных. declare -p
показывает все переменные, а declare -f
можно использовать для отображения функций.
В основном происходит две вещи: команды set
вызываются в подоболочке, чтобы не испортить ваши текущие параметры оболочки, и эта подоболочка устанавливается в режим POSIX перед перечисление всех переменных. Процитируем руководство:
posix Измените поведение bash, где операция по умолчанию отличается от стандарта POSIX чтобы соответствовать стандарту (режим posix).См. ТАКЖЕ ниже для ссылка на документ в котором подробно описывается, как режим posix влияет на поведение bash.
Короче говоря, bash
в режиме POSIX будет вести себя ближе к тому, что делает sh
.
Что касается set
без опций, он также есть в руководстве и фактически указывает причину, почему необходим режим POSIX:
set [+abefhkmnptuvxBCEHPT] [+o имя-опции] [аргумент ...] Без опций, имя и значение каждой переменной оболочки отображаются в формате которые можно повторно использовать в качестве входных данных для установки или сброса текущие установленные переменные. . . В режиме posix отображаются только переменные оболочки.
...в отличие от определений переменных и функций, что делается, когдаbash
работает в обычном режиме.
Дополнительную информацию о режиме POSIX см. в этом.