Ich versuche, ein Shell-Skript zu schreiben, das nach einem ASCII-Zeichen im Bereich AZ oder az fragt und dessen äquivalenten numerischen Wert zurückgibt. Die Ausgabe könnte beispielsweise folgendermaßen aussehen:
scarlet$ Please type a character between A and Z or between a and z:
scarlet$ A
scarlet$ The decimal value of A is: 65
Mein Versuch:
#!/bin/bash
echo Enter a letter:
read A
echo -n ${A} | od -i | head -1 | cut -b 10- | tr -d " "
text-processing
scripting
od
Host Post
quelle
quelle
echo -n A
was du erwartest? Wenn nicht, versuchen Sie esprintf
stattdessen. Machtod -i
was du erwartest? Wenn nicht, versuchen Sie esod -t d1
.Antworten:
POSIX:
printf a | od -A n -t d1
Perl:
perl -e 'print ord($ARGV[0])' a
Perl, Umgang mit UTF-8 in einem UTF-8-Gebietsschema:
perl -C255 -e 'print ord($ARGV[0])' œ
quelle
POSIX:
Es funktioniert auch mit Nicht-ASCII-Zeichen in Bash 4.0 und höher und in zsh:
Sie können auch
recode ..dump
hexadezimale Codepunkte anzeigen:quelle
A=a ; printf '%d\n' "'$A'"
und auf ksh so etwas wieA=a; integer N=$(("'$A'")); print $N
(print oder printf wird nicht benötigt) verwenden.Vielleicht:
Prost
quelle
Eine ungerade Lösung, bisher nur Bash und nur Kleinbuchstaben.
z
ist das gesuchte Zeichen, hiers
als Suche.i=97
weil ascii (a) = 97. Der Rest ist offensichtlich.Sie können es natürlich in eine einzelne Zeile setzen. Hier sind einige Semikolons:
;;;;;
(sollte ausreichen)quelle
read char; i=97; for c in {a..z}; do [ "$c" = "$char" ] && echo $i && break || ((i+=1)); done
Versuchen Sie,
od -t d1
wenn Sie es haben. Die anderen Ausgabeformate sind ziemlich seltsam.Sie brauchen auch keinen Kopf und Schnitt, zum Beispiel:
quelle
Wenn Sie nur ein Programm möchten, das dies tut, und Sie dies nicht als Übung tun, gibt es ein Programm namens
ascii
, das dies tut. Ihre Distribution bietet es möglicherweise bereits als Paket an, wenn Sie es nicht unter http://www.catb.org/~esr/ascii/ erhalten .quelle
quelle