Загалом, оболонка може розуміти шістнадцяткові, окті та десяткові числа у змінних, за умови, що вони були визначені як integers
:
$ declare -i v1 v2 v3 v4 v5 v6 v7
$ v1=0112
$ v2=74
$ v3=0x4a
$ v4=8#112
$ v5=10#74
$ v6=16#4a
$ v7=18#gg
echo "$v1 $v2 $v3 $v4 $v5 $v6 $v7"
74 74 74 74 74 74 304
Або вони є результатом "арифметичного розширення":
$ : $(( v1=0112, v2=74, v3=0x4a, v4=8#112, v5=10#74, v6=16#4a, v7=18#gg ))
$ echo "$v1 $v2 $v3 $v4 $v5 $v6 $v7"
74 74 74 74 74 74 304
Отже, вам просто потрібен один спосіб надрукувати символ, який належить до змінної величини.
Але ось два можливі способи:
$ var=$((0x65))
$ printf '%b\n' "\\$(printf '0%o' "$var")"
e
$ declare -i var
$ var=0x65; printf '%b\n' "\U$(printf '%08x' "$var")"
e
Два printf потрібні, один для перетворення значення в шістнадцятковий рядок, а другий для фактичного друку символу.
Друга буде друкувати будь-яку точку UNICODE (якщо ваша консоль встановлена правильно).
Наприклад:
$ var=0x2603; printf '%b\n' "\U$(printf '%08x' "$var")"
☃
Снігова людина.
Символ, який має utf-8 подання таким, яким f0 9f 90 ae
є 0x1F42E
. Шукайте, cow face site:fileformat.info
щоб отримати його :
$ var=0x1F42F; printf '%b\n' "\U$(printf '%08x' "$var")"
🐮
Примітка : Існує проблема із способом UNICODE в тому, що для bash до 4.3 (виправлено у цій версії та вгору) символи між точками 128 та 255 UNICODE (у десятковій формі) можуть бути неправильно надруковані.
Список літератури
Четвертий пункт всередині PARAMETERS
в man bash
:
Якщо змінна має свій цілий набір атрибутів, то значення оцінюється як арифметичний вираз, навіть якщо розширення $ ((...)) не використовується (див. Арифметичне розширення нижче).
Всередині "АРИТМЕТИЧНА ОЦІНКА" в man bash
:
Константи з провідним 0 інтерпретуються як вісімкові числа. Провідний 0x або 0X позначає шістнадцятковий. В іншому випадку числа приймають форму [base #] n, де необов'язковою базою є десяткове число між 2 і 64, що представляє арифметичну основу, а n - число в цій базі. Якщо база # опущена, то використовується база 10. Цифри, що перевищують 9, представлені малими літерами, великими літерами @ і _ у цьому порядку. Якщо підстава менше або дорівнює 36, то для представлення чисел між 10 і 35 можуть використовуватися великі і малі літери.