Дело в UTF-8 заключается в том, что любой старый код, который просто передает строковые данные и использует условное выражение строки строки завершающих строк с нулевым байтом, отлично работает. Это обычно характеризует, как оболочка обрабатывает имена и аргументы команд.
Даже если оболочка выполняет некоторую строчную обработку со специальными значениями для символов ascii, UTF-8 по-прежнему в основном работает нормально, потому что символы ascii кодируют точно так же в UTF-8. Так, например, оболочка все равно сможет распознавать все свои ключевые слова и синтаксические символы, такие как []{}()<>/.?;'"$&*
и т. Д. Это характеризует, как, например, обрабатывать строковые литералы и другие биты синтаксиса скрипта.
Вы должны иметь возможность использовать UTF-8 в комментариях, строковых литералах, именах команд и аргументах команды. (конечно, система должна будет поддерживать имена файлов UTF-8, чтобы иметь команды UTF-8, а командам придется обрабатывать аргументы командной строки UTF-8.)
Возможно, вы не сможете использовать UTF-8 в именах функций или переменных, так как оболочка может искать строки символов ascii. Хотя если ваш язык UTF-8, то интерпретатор, который использует функции классификации символов на основе языка, может работать с идентификаторами UTF-8, но, вероятно, он не переносится.
Технически, нет современной оболочки Бурна. 'sh' - это оболочка POSIX, которая в значительной степени основана на' ksh', которая, в свою очередь, была под влиянием, но значительно расширяет оболочку Bourne. – chepner
Да, я должен был сказать * POSIX * shell. Хорошая точка зрения. Как уже было сказано, слишком поздно менять, учитывая различия между ними. – pilona
Это второстепенный момент; данные ответы по-прежнему применимы. – chepner