Wie wird ein 4-stelliges Unicode-Zeichen in Bash wiedergegeben?

224

Ich möchte meiner Shell-Eingabeaufforderung den Unicode-Totenkopf hinzufügen (insbesondere den 'SKULL AND CROSSBONES' (U + 2620)), aber ich kann die magische Beschwörung nicht herausfinden, um das Echo dazu zu bringen, sie oder andere zu spucken. 4-stelliges Unicode-Zeichen. Zweistellige sind einfach. Zum Beispiel echo -e "\ x55" ,.

Zusätzlich zu den folgenden Antworten sollte beachtet werden, dass Ihr Terminal natürlich Unicode unterstützen muss, damit die Ausgabe Ihren Erwartungen entspricht. gnome-terminal leistet gute Arbeit, ist aber nicht unbedingt standardmäßig aktiviert.

Gehen Sie in der Terminal-App von macOS zu Einstellungen-> Codierungen und wählen Sie Unicode (UTF-8).

masukomi
quelle
7
Beachten Sie, dass Ihr Kommentar "Zweistellige sind einfach (zu wiederholen)" nur für Werte bis zu "\x7F"einem UTF-8-Gebietsschema gültig ist (was das bashTag für Ihr Land vorschlägt) ... Muster, die durch ein einzelnes Byte dargestellt werden, liegen niemals im Bereich \x80-\xFF. Dieser Bereich ist in UTF-8-Zeichen mit einem Byte unzulässig. zB ein Unicode-Codepoint-Wert von U+0080(dh \x80) ist tatsächlich 2 Bytes in UTF-8 .. \xC2\x80..
Peter.O
4
ZB printf "\\u007C\\u001C".
Kenorb
NB: für mich gnome-terminal, echo -e '\ufc'produziert keine ü, auch mit Zeichencodierung Satz UTF-8. Doch zB urxvtdruckt zB printf "\\ub07C\\ub01C"wie erwartet (nicht mit einem oder Kasten).
Isomorphismen
@ Peter.O Warum ist das bashTag so ein nützlicher Hinweis? Sind in CJK verschiedene Terminals gemeinsam oder…?
Isomorphismen
1
@ Peter.O zsh, fish, scsh, elvish, etc ... es gibt viele verschiedene Shells, die jeweils mit Unicode-Zeichen umgehen können, wie sie wollen (oder nicht). "bash" macht deutlich, dass es bei dieser Frage nicht um eine seltsame Shell geht, die die Dinge anders macht.
Masukomi

Antworten:

237

In UTF-8 sind es tatsächlich 6 Ziffern (oder 3 Bytes).

$ printf '\xE2\x98\xA0'

Verwenden Sie hexdump, um zu überprüfen, wie es von der Konsole codiert wird:

$ printf  | hexdump
0000000 98e2 00a0                              
0000003
vartec
quelle
5
Meine Ausgänge " " statt ☠ ... Warum ist das so?
Trusktr
8
Das ist richtig. Ich entdeckte, dass ich LANG=Cstatt benutzte LANG=en_US.UTF-8. Jetzt zeigen meine Terminals in Gnome die Symbole richtig an ... Die echten Terminals (tty1-6) tun dies jedoch immer noch nicht.
Trusktr
6
Für diejenigen, die einen Hexdump versuchen: 0000000 f0 9f 8d baübersetzt in \xf0\x9f\x8d\xba. Beispiel Echo : echo -e "\xf0\x9f\x8d\xba".
Blaise
8
Sie können auch die $'...'Syntax verwenden, um das codierte Zeichen in eine Variable zu übertragen, ohne eine $(...)Erfassungsunterschale zu verwenden, um sie in Kontexten zu verwenden, die die Escape-Sequenzen nicht selbst interpretieren:skull=$'\xE2\x98\xA0'
Andrew Janke
7
Eine andere Sache über Hexdump: Auf meinem Computer wird der zweite Befehl in der Antwort ausgegeben 0000000 98e2 00a0. Natürlich 0000000ist das nur ein unwichtiger Offset, aber die Bytes danach werden übersetzt \xe2\x98\xa0, weil die Maschine die Little-Endian-Bytereihenfolge verwendet.
Sigalor
98
% echo -e '\u2620'     # \u takes four hexadecimal digits

% echo -e '\U0001f602' # \U takes eight hexadecimal digits
😂

Dies funktioniert in Zsh (ich habe Version 4.3 überprüft) und in Bash 4.2 oder neuer.

Juliano
quelle
16
das spuckt nur aus, wenn ich es tue.
Masukomi
Für mich auch. Welche Shell benutzt du, Juliano?
Joachim Sauer
2
Entschuldigung, ich habe vergessen zu sagen, dass ich zsh benutze.
Juliano
32
Unterstützung für \ u wurde in Bash 4.2 hinzugefügt.
Lri
4
funktioniert NICHT bei mir, Mac OS 10.14.2, bash (GNU bash, Version 3.2.57 (1) -release (x86_64-apple-darwin18)). Es druckt lediglich die Eingabe aus - $ echo -e '\ u2620' <enter> druckt einfach aus: \ u2620
Motti Shneor
68

Solange Ihre Texteditoren mit Unicode (vermutlich in UTF-8 codiert) umgehen können, können Sie den Unicode-Codepunkt direkt eingeben.

Zum Beispiel würden Sie im Vim -Texteditor in den Einfügemodus wechseln und Ctrl+ V+ Uund dann die Codepunktnummer als 4-stellige Hexadezimalzahl drücken (Pad mit Nullen, falls erforderlich). Sie würden also Ctrl+ V+ eingeben U 2 6 2 0. Siehe: Was ist der einfachste Weg, um Unicode-Zeichen in ein Dokument einzufügen?

An einem Terminal läuft Bash Sie würde geben CTRL+ SHIFT+ Uund geben Sie die Hexadezimal - Code-Nummer des Zeichens Sie wollen. Während der Eingabe sollte Ihr Cursor unterstrichen sein u. Die erste nicht eingegebene Ziffer beendet die Eingabe und rendert das Zeichen. So können Sie U + 2620 in Bash wie folgt drucken:

echo CTRL+ SHIFT+U2620ENTERENTER

(Die erste Eingabe beendet die Unicode-Eingabe und die zweite führt den echoBefehl aus.)

Gutschrift: Fragen Sie Ubuntu SE

RobM
quelle
1
Eine gute Quelle für die hexademischen Codepunkte ist unicodelookup.com/#0x2620/1
RobM
1
Die von mir verwendete Version von vim (7.2.411 unter RHEL 6.3) reagiert nicht wie gewünscht, wenn zwischen Strg-V und U ein Punkt steht, funktioniert aber einwandfrei, wenn dieser Punkt weggelassen wird.
Chris Johnson
@ChrisJohnson: Ich habe den Punkt aus den Anweisungen entfernt, er war nicht als Tastendruck gedacht (weshalb er nicht mit dem Tastatureffekt angezeigt wurde). Entschuldigung für die Verwirrung.
RobM
5
Achtung: Dies funktioniert in einem Terminal, in dem Bash ausgeführt wird, nur, wenn Sie es in einer GTK + -Umgebung als Gnome ausführen.
Nr.
1
Die Fähigkeit dazu C-S-u 2 6 2 0ist eine Funktion Ihres Terminalemulators, der X-Eingabemethode (XIM) oder ähnlichem. AFAIK, Sie können nicht beide SHIFTund CTRLan die Terminalschicht senden . Das Terminal spricht nur in Zeichen und nicht in Schlüsselsymbolen und Schlüsselcodes wie Ihrem X-Server (außerdem ist es in jeder Hinsicht 7-Bit). In dieser Welt CTRLmaskiert die 4 höchstwertigen Bits (& 0b00001111), was zu
nabin-info
31

Hier ist eine vollständig interne Bash-Implementierung, keine Verzweigung, unbegrenzte Größe von Unicode-Zeichen.

fast_chr() {
    local __octal
    local __char
    printf -v __octal '%03o' $1
    printf -v __char \\$__octal
    REPLY=$__char
}

function unichr {
    local c=$1    # Ordinal of char
    local l=0    # Byte ctr
    local o=63    # Ceiling
    local p=128    # Accum. bits
    local s=''    # Output string

    (( c < 0x80 )) && { fast_chr "$c"; echo -n "$REPLY"; return; }

    while (( c > o )); do
        fast_chr $(( t = 0x80 | c & 0x3f ))
        s="$REPLY$s"
        (( c >>= 6, l++, p += o+1, o>>=1 ))
    done

    fast_chr $(( t = p | c ))
    echo -n "$REPLY$s"
}

## test harness
for (( i=0x2500; i<0x2600; i++ )); do
    unichr $i
done

Ausgabe war:

─━│┃┄┅┆┇┈┉┊┋┌┍┎┏
┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟
┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯
┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿
╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏
═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟
╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯
╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿
▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏
▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟
■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯
▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿
◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●
◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟
◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯
◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿
Orwellophil
quelle
Ich bin sehr gespannt auf die Gründe für die Round-Around-Methode und die spezifische Verwendung der REPLY-Variablen. Ich gehe davon aus, dass Sie die Bash-Quelle inspiziert oder durchlaufen haben oder etwas zu optimieren haben. Ich kann sehen, wie Ihre Auswahl optimiert werden könnte, wenn auch stark vom Interpreter abhängig.
Nabin-Info
14

Fügen Sie einfach "☠" in Ihr Shell-Skript ein. Im richtigen Gebietsschema und auf einer Unicode-fähigen Konsole wird einwandfrei gedruckt:

$ echo 

$

Eine hässliche "Problemumgehung" wäre die Ausgabe der UTF-8-Sequenz, dies hängt jedoch auch von der verwendeten Codierung ab:

$ echo -e '\xE2\x98\xA0'

$
Joachim Sauer
quelle
13

Schneller Einzeiler zum Konvertieren von UTF-8-Zeichen in ihr 3-Byte-Format:

var="$(echo -n '☠' | od -An -tx1)"; printf '\\x%s' ${var^^}; echo
David King
quelle
5
Ich würde das obige Beispiel nicht schnell aufrufen (mit 11 Befehlen und ihren Parametern) ... Außerdem werden nur 3-Byte-UTF-8-Zeichen verarbeitet (UTF-8-Zeichen können 1, 2 oder 3 Byte sein) ... Dies ist etwas kürzer und funktioniert für 1-3 ++++ Bytes: printf "\\\x%s" $(printf '☠'|xxd -p -c1 -u).... xxd wird als Teil des 'vim-
common'
PS: Mir ist gerade aufgefallen, dass das obige Hexdump / Awk-Beispiel die Folge von Bytes in einem Bytepaar umschaltet. Dies gilt nicht für einen UTF-8-Dump. Es wäre relavent, wenn es ein Dump von UTF-16LE wäre und Unicode- Codepunkte ausgeben wollte , aber es ist hier nicht sinnvoll, da die Eingabe UTF-8 ist und die Ausgabe genau wie die Eingabe ist (plus das \ x vor jedem Hexdigit -Paar)
Peter.O
7
UTF-8-Zeichen können 1 - 4 Byte-Sequenzen sein
cm
1
Basierend auf dem Kommentar von @ Peter.O finde ich Folgendes, obwohl größer, ziemlich praktisch:hexFromGlyph(){ if [ "$1" == "-n" ]; then outputSeparator=' '; shift; else outputSeparator='\n'; fi for glyph in "$@"; do printf "\\\x%s" $(printf "$glyph"|xxd -p -c1 -u); echo -n -e "$outputSeparator"; done } # usage: $ hexFromGlyph ☠ ✿ \xE2\x98\xA0 \xE2\x9C\xBF $ hexFromGlyph -n ☠ ✿ \xE2\x98\xA0 \xE2\x9C\xBF
StephaneAG
2
Guter Gott Mann. Bedenken Sie: codepoints () { printf 'U+%04x\n' ${@/#/\'} ; } ; codepoints A R ☯ 🕉 z ... genießen Sie 👍
nabin-info
8

Ich benutze dies:

$ echo -e '\u2620'

Dies ist ziemlich einfacher als das Durchsuchen einer Hex-Darstellung ... Ich verwende dies in meinen Shell-Skripten. Das funktioniert auf gnome-term und urxvt AFAIK.

Metal3d
quelle
2
@masukomi Wenn Sie wissen, wie man Brew verwendet, können Sie eine neuere Bash installieren und diese verwenden. Das Obige funktioniert auf meinem Mac-Terminal einwandfrei, wenn Sie die aktualisierte Bash verwenden.
Mcheema
Ja, das ist in Ordnung mit neueren Versionen von Bash. Hower Prompt - Strings, zB PS1 $ nicht Echo Escape - Formate verwenden
CMS
6

Möglicherweise müssen Sie den Codepunkt als Oktal codieren, damit die sofortige Erweiterung ihn korrekt decodiert.

U + 2620, codiert als UTF-8, ist E2 98 A0.

Also in Bash,

export PS1="\342\230\240"

wird Ihre Muschel schnell in Schädel und Knochen verwandeln.

cm
quelle
Hallo, wie lautet der Code, den ich für "e0 b6 85" eingeben soll? wie kann ich es finden
Udayantha Udy Warnasuriya
Konvertieren Sie einfach die hexadezimalen (Basis 16) Zahlen e0 b6 85 in oktale (Basis 8) - ein Taschenrechner ist wahrscheinlich der einfachste Weg, dies zu tun
cms
e0 b6 85 hex ist 340 266 205 oktal
cms
Das hat funktioniert, vielen Dank! Übrigens finden Sie eine Oktalversion auf diesen Seiten: graphemica.com/%E2%9B%B5
Perlnika
6

Verwenden Sie in Bash zum Drucken eines Unicode-Zeichens zur Ausgabe \ x, \ u oder \ U (erstens für zweistelliges Hex, zweitens für 4-stelliges Hex, drittes für eine beliebige Länge).

echo -e '\U1f602'

Wenn Sie es einer Variablen zuweisen möchten, verwenden Sie die Syntax $ '...'

x=$'\U1f602'
echo $x
user2622016
quelle
5

Wenn Ihnen ein Perl-Einzeiler nichts ausmacht:

$ perl -CS -E 'say "\x{2620}"'

-CSAktiviert die UTF-8-Decodierung bei der Eingabe und die UTF-8-Codierung bei der Ausgabe. -Ewertet das nächste Argument als Perl aus, wobei moderne Funktionen wie sayaktiviert sind. Wenn Sie am Ende keinen Zeilenumbruch wünschen, verwenden Sie printanstelle von say.

Flimm
quelle
5

Jeder dieser drei Befehle druckt das gewünschte Zeichen in einer Konsole, vorausgesetzt, die Konsole akzeptiert UTF-8- Zeichen (die meisten aktuellen):

echo -e "SKULL AND CROSSBONES (U+2620) \U02620"
echo $'SKULL AND CROSSBONES (U+2620) \U02620'
printf "%b" "SKULL AND CROSSBONES (U+2620) \U02620\n"

SKULL AND CROSSBONES (U+2620) 

Anschließend können Sie das eigentliche Symbol (Bild, Zeichen) in einen beliebigen (UTF-8-fähigen) Texteditor kopieren und einfügen.

Wenn Sie sehen möchten, wie ein solcher Unicode-Codepunkt in UTF-8 codiert ist, verwenden Sie xxd (viel besserer Hex-Viewer als od):

echo $'(U+2620) \U02620' | xxd
0000000: 2855 2b32 3632 3029 20e2 98a0 0a         (U+2620) ....

That means that the UTF8 encoding is: e2 98 a0

Oder in HEX, um Fehler zu vermeiden: 0xE2 0x98 0xA0. Das heißt, die Werte zwischen dem Leerzeichen (HEX 20) und dem Zeilenvorschub (Hex 0A).

Wenn Sie tief in die Konvertierung von Zahlen in Zeichen eintauchen möchten, lesen Sie hier einen Artikel aus Gregs Wiki (BashFAQ) über die ASCII-Codierung in Bash!

Benutzer2350426
quelle
Betreff: "Oder in HEX, um Fehler zu vermeiden ..." Ich glaube kaum, dass das Konvertieren eines Unicode-Zeichens in eine Binärcodierung, die Sie in Hex-Zeichen ausdrücken, dazu beiträgt , Fehler zu vermeiden. Die Verwendung der Unicode-Notation in "bash" würde Fehler besser vermeiden, dh: "\ uHHHH --- das Unicode-Zeichen (ISO / IEC 10646), dessen Wert der ---- Hexadezimalwert HHHH (ein bis vier Hexadezimalstellen) ist; \ UHHHHHHHH ---- das Unicode-Zeichen (ISO / IEC 10646), dessen Wert der ---- Hexadezimalwert HHHHHHHH (ein bis acht Hexadezimalstellen) ist
Astara
4

Das printfeingebaute (genau wie das der Coreutils printf) kennt die \uEscape-Sequenz, die 4-stellige Unicode-Zeichen akzeptiert:

   \uHHHH Unicode (ISO/IEC 10646) character with hex value HHHH (4 digits)

Test mit Bash 4.2.37 (1):

$ printf '\u2620\n'
Michael Jaros
quelle
printf ist auch eine integrierte Shell. Sie verwenden wahrscheinlich die Standard-MacOS-Bash (v3). Versuchen Sie mit \printf, die eigenständige ausführbare Datei zu verwenden, oder versuchen Sie es mit einem aktualisierten bash
mcint
4

Entschuldigen Sie, dass Sie diese alte Frage wiederbelebt haben. Bei der Verwendung bashgibt es jedoch einen sehr einfachen Ansatz zum Erstellen von Unicode-Codepunkten aus einfachen ASCII-Eingaben, der sich überhaupt nicht verzweigt :

unicode() { local -n a="$1"; local c; printf -vc '\\U%08x' "$2"; printf -va "$c"; }
unicodes() { local a c; for a; do printf -vc '\\U%08x' "$a"; printf "$c"; done; };

Verwenden Sie es wie folgt, um bestimmte Codepunkte zu definieren

unicode crossbones 0x2620
echo "$crossbones"

oder um die ersten 65536-Unicode-Codepunkte auf stdout abzulegen (dauert auf meinem Computer weniger als 2 Sekunden. Der zusätzliche Speicherplatz verhindert, dass bestimmte Zeichen aufgrund der Monospace-Schriftart der Shell ineinander fließen):

for a in {0..65535}; do unicodes "$a"; printf ' '; done

oder um eine kleine, sehr typische Elterngeschichte zu erzählen (dies erfordert Unicode 2010):

unicodes 0x1F6BC 32 43 32 0x1F62D 32 32 43 32 0x1F37C 32 61 32 0x263A 32 32 43 32 0x1F4A9 10

Erläuterung:

  • printf '\UXXXXXXXX' druckt ein beliebiges Unicode-Zeichen aus
  • printf '\\U%08x' numberdruckt \UXXXXXXXXmit der in Hex konvertierten Zahl, diese wird dann einer anderen zugeführt, printfum das Unicode-Zeichen tatsächlich auszudrucken
  • printf erkennt Oktal (0oct), Hex (0xHEX) und Dezimal (0 oder Zahlen, die mit 1 bis 9 beginnen) als Zahlen, sodass Sie auswählen können, welche Darstellung am besten passt
  • printf -v var ..sammelt die Ausgabe von printfin einer Variablen ohne Gabel (was die Dinge enorm beschleunigt)
  • local variable ist da, um den globalen Namespace nicht zu verschmutzen
  • local -n var=otherAliase varzu other, so dass sich die Zuordnung zu varändert other. Ein interessanter Teil hier ist, dass er varTeil des lokalen Namespace ist, während er otherTeil des globalen Namespace ist.
    • Bitte beachten Sie, dass es nicht so etwas wie localoder globalNamespace in bash. Variablen werden in der Umgebung gespeichert und sind immer global. Local löscht nur den aktuellen Wert und stellt ihn wieder her, wenn die Funktion wieder verlassen wird. Andere Funktionen, die innerhalb der Funktion mit aufgerufen localwerden, sehen weiterhin den "lokalen" Wert. Dies ist ein grundlegend anderes Konzept als alle normalen Scoping-Regeln, die in anderen Sprachen zu finden sind (und was bashfunktioniert, ist sehr leistungsfähig, kann aber zu Fehlern führen, wenn Sie ein Programmierer sind, der sich dessen nicht bewusst ist).
Tino
quelle
gut - funktioniert bei mir überhaupt nicht. Jeder Versuch, eine Ihrer Funktionen zu verwenden, gibt Folgendes aus: Zeile 6: lokal: -n: ungültige Option lokal: Verwendung: lokaler Name [= Wert] ... Ich verwende das neueste (10.14.2) MacOS und bash (GNU bash) , Version 3.2.57 (1) -Veröffentlichung (x86_64-apple-darwin18))
Motti Shneor
4

Hier ist eine Liste aller verfügbaren Unicode-Emojis:

https://en.wikipedia.org/wiki/Emoji#Unicode_blocks

Beispiel:

echo -e "\U1F304"
🌄

Verwenden Sie hexdump, um den ASCII-Wert dieses Zeichens abzurufen

echo -e "🌄" | hexdump -C

00000000  f0 9f 8c 84 0a                                    |.....|
00000005

Verwenden Sie dann die im Hex-Format angegebenen Werte

echo -e "\xF0\x9F\x8C\x84\x0A"
🌄
Matheus
quelle
Das Echo der Zeichenfolge \ U <hex> funktioniert unter OSX nicht, sondern gibt nur genau das aus, was in Anführungszeichen steht.
Masukomi
2

Einfach mit einem Python2 / 3-Einzeiler:

$ python -c 'print u"\u2620"'    # python2
$ python3 -c 'print(u"\u2620")'  # python3

Ergebnisse in:

Chris Johnson
quelle
2

In Bash:

UnicodePointToUtf8()
{
    local x="$1"               # ok if '0x2620'
    x=${x/\\u/0x}              # '\u2620' -> '0x2620'
    x=${x/U+/0x}; x=${x/u+/0x} # 'U-2620' -> '0x2620'
    x=$((x)) # from hex to decimal
    local y=$x n=0
    [ $x -ge 0 ] || return 1
    while [ $y -gt 0 ]; do y=$((y>>1)); n=$((n+1)); done
    if [ $n -le 7 ]; then       # 7
        y=$x
    elif [ $n -le 11 ]; then    # 5+6
        y=" $(( ((x>> 6)&0x1F)+0xC0 )) \
            $(( (x&0x3F)+0x80 ))" 
    elif [ $n -le 16 ]; then    # 4+6+6
        y=" $(( ((x>>12)&0x0F)+0xE0 )) \
            $(( ((x>> 6)&0x3F)+0x80 )) \
            $(( (x&0x3F)+0x80 ))"
    else                        # 3+6+6+6
        y=" $(( ((x>>18)&0x07)+0xF0 )) \
            $(( ((x>>12)&0x3F)+0x80 )) \
            $(( ((x>> 6)&0x3F)+0x80 )) \
            $(( (x&0x3F)+0x80 ))"
    fi
    printf -v y '\\x%x' $y
    echo -n -e $y
}

# test
for (( i=0x2500; i<0x2600; i++ )); do
    UnicodePointToUtf8 $i
    [ "$(( i+1 & 0x1f ))" != 0 ] || echo ""
done
x='U+2620'
echo "$x -> $(UnicodePointToUtf8 $x)"

Ausgabe:

─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟
┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿
╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟
╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿
▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟
■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿
◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟
◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿
U+2620 -> 
Дмитрий Юдин
quelle
0

Wenn der Hex-Wert des Unicode-Zeichens bekannt ist

H="2620"
printf "%b" "\u$H"

Wenn der Dezimalwert eines Unicode-Zeichens bekannt ist

declare -i U=2*4096+6*256+2*16
printf -vH "%x" $U              # convert to hex
printf "%b" "\u$H"
philcolbourn
quelle