Как заставить команду сценария работать как в Linux, так и в UNIX

Как правило, модификатор control воздействует на символы ASCII, удаляя все последние 5 битов. Это отображает несколько разных символов в диапазон 0..31 , используемый для управляющих символов ASCII.

Исходя из этого правила, можно было бы ожидать, что они будут отображаться в 031, используя модификатор control :

037   31    1F    US  (unit separator)
077   63    3F    ?
137   95    5F    _
177   127   7F    DEL

, а они не будут:

057   47    2F    /
117   79    4F    O
157   111   6F    o

В качестве альтернативы модификатор control может применяться только к символам в диапазоне 32..63 , используя аналогию с клавишей shift , которая полезна в ASCII для отображения диапазона От 64..94 до 96..126 (буквы верхнего / нижнего регистра). В этом случае они могут отображаться на 031 :

037   31    1F    US  (unit separator)
057   47    2F    /
077   63    3F    ?

и (это было давно) наблюдение @aprogrammer звучит знакомо. Но в инструкции к VT100 этого нет. В главе 3 он указывает на таблицу, в которой задокументированы ключи и их контрольные эквиваленты. При этом используются коды из полного диапазона 95 символов (32..126), но документируется только один регистр для каждого управляющего символа. Все остальные возможные персонажи недокументированы. Но обратите внимание, что таблица контролирует ? . На моей клавиатуре ? - это сдвинутая клавиша.На фотографиях, которые я обнаружил с клавиатурой VT100, она не изображена как несмещенная клавиша. И (неудивительно) несмещенный код для этого конкретного ключа - / . DEC могла задокументировать их на основе существующих ключей от более раннего терминала, но, возможно, они сделали это, чтобы таблица была короткой.

Однако преобразование не полностью зависит от xterm . Он получает события X, которые имеют определенные коды клавиш вместе с информацией о модификаторах. Вообще говоря, эти коды клавиш соответствуют буквам, отображаемым на клавиатуре, в то время как модификаторы, такие как shift и control , передаются отдельно. xterm использует функцию времени выполнения X, такую ​​как Xutf8LookupString или XmbLookupString , чтобы объединить некоторые события (например, shift ). Именно здесь и принимается решение о переводе этих управляющих символов. xterm позже уточняет / изменяет информацию для специальных клавиш (например, backspace ), но большая часть преобразования выполняется в библиотеках X с использованием конфигурации клавиатуры.

Дополнительная литература:

0
30.05.2019, 04:00
1 ответ

Попробуйте утилитуexpr:

NUMBER=`expr "${NEW_COUNT}" - "{$OLD_COUNT}"`
0
28.01.2020, 03:39

Теги

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