Gibt es eine einfache Lösung, um Ordnungszahlen wie 1, 2, 3, ... in einem Shell-Skript dem Alphabet a, b, c zuzuordnen?
Gibt es eine einfache Lösung, um Ordnungszahlen wie 1, 2, 3, ... in einem Shell-Skript dem Alphabet a, b, c zuzuordnen?
Antworten:
In Bourne-ähnlichen Muscheln:
$ set a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo "$5"
e
(mit neueren Versionen von ksh93, bashoder zshkönnen Sie die verkürzen setLinie set {a..z})
Oder:
$ awk 'BEGIN{printf("%c\n", 0x60 + 5)}'
e
Mit einigen Implementierungen von dc(mindestens GNU dc):
$ echo 96 5 + P | dc
e
Mit zshkönnen Sie Basis 36 verwenden:
$ echo $(([##36] 9 + 5))
E
Oder verwenden Sie \0ooooktale Sequenzen in printf %b:
$ printf '%b\n' "\0$(([##8]0x60 + 5))"
e
Für nicht englische Alphabete unter der Annahme eines UTF-8-Gebietsschemas (hier für Griechisch):
$ printf '%b\n' "\u$(([##16]0x3B0 + 5))"
ε
Dies basiert auf der Zeichenfolge in Unicode. Es gibt nicht viele Garantien dafür, dass diese Reihenfolge mit der in Ihrer Region üblichen alphabetischen Reihenfolge für Ihre Sprache übereinstimmt. Sie können also auch die vollständige Liste der Zeichen von Hand hart codieren und das erste Formular verwenden.
Wie für das russische Alphabet (laut Wikipedia):
$ set а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
$ echo "$5"
д
Was nicht genau mit der Unicode-Reihenfolge übereinstimmt.
zshaber für ksh93oder bash, was Sie brauchen a=('' {a..z})(oder a=([1]=a {b..z})mit bashnur) als jene Schalen beginnen ihre Anordnungen auf dem Index 0 und nicht 1 im Gegensatz zu allen anderen Shells .
a=({a..z}); echo ${a[5]}