Im Allgemeinen kann die Shell Hex-, Okt- und Dezimalzahlen in Variablen verstehen, vorausgesetzt, sie wurden wie folgt definiert 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
Oder sie sind das Ergebnis einer "arithmetischen Erweiterung":
$ : $(( 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
Sie brauchen also nur eine Möglichkeit, um das Zeichen zu drucken, das zu einem variablen Wert gehört.
Aber hier sind zwei Möglichkeiten:
$ var=$((0x65))
$ printf '%b\n' "\\$(printf '0%o' "$var")"
e
$ declare -i var
$ var=0x65; printf '%b\n' "\U$(printf '%08x' "$var")"
e
Die beiden printf werden benötigt, eine, um den Wert in eine hexadezimale Zeichenfolge umzuwandeln, und die zweite, um das Zeichen tatsächlich zu drucken.
Der zweite druckt einen beliebigen UNICODE-Punkt (wenn Ihre Konsole richtig eingestellt ist).
Beispielsweise:
$ var=0x2603; printf '%b\n' "\U$(printf '%08x' "$var")"
☃
Ein Schneemann.
Das Zeichen, das eine utf-8-Darstellung f0 9f 90 ae
hat 0x1F42E
. Suchen Sie nach cow face site:fileformat.info
, um es zu bekommen :
$ var=0x1F42F; printf '%b\n' "\U$(printf '%08x' "$var")"
🐮
Hinweis : Es gibt ein Problem mit der UNICODE-Methode, da für Bash vor 4.3 (korrigiert in dieser Version und höher) die Zeichen zwischen den UNICODE-Punkten 128 und 255 (in Dezimalzahlen) möglicherweise falsch gedruckt werden.
Verweise
Vierter Absatz innen PARAMETERS
in man bash
:
Wenn für die Variable das Integer-Attribut festgelegt ist, wird der Wert als arithmetischer Ausdruck ausgewertet, auch wenn die Erweiterung $ ((...)) nicht verwendet wird (siehe Arithmetische Erweiterung unten).
Innerhalb von "ARITHMETIC EVALUATION" in man bash
:
Konstanten mit einer führenden 0 werden als Oktalzahlen interpretiert. Ein führendes 0x oder 0X bedeutet hexadezimal. Andernfalls haben Zahlen die Form [Basis #] n, wobei die optionale Basis eine Dezimalzahl zwischen 2 und 64 ist, die die arithmetische Basis darstellt, und n eine Zahl in dieser Basis ist. Wenn die Basis # weggelassen wird, wird die Basis 10 verwendet. Die Ziffern größer als 9 werden durch die Kleinbuchstaben, die Großbuchstaben @ und _ in dieser Reihenfolge dargestellt. Wenn die Basis kleiner oder gleich 36 ist, können Klein- und Großbuchstaben austauschbar verwendet werden, um Zahlen zwischen 10 und 35 darzustellen.