Estoy tratando de escribir un script de shell que pide un carácter ASCII en el rango AZ o az y devuelve su valor numérico equivalente. Por ejemplo, el resultado podría tener el siguiente aspecto:
scarlet$ Please type a character between A and Z or between a and z:
scarlet$ A
scarlet$ The decimal value of A is: 65
Mi intento:
#!/bin/bash
echo Enter a letter:
read A
echo -n ${A} | od -i | head -1 | cut -b 10- | tr -d " "
text-processing
scripting
od
Publicación de host
fuente
fuente

echo -n Alo que esperas? Si no, intente en suprintflugar. ¿Haceod -ilo que esperas? Si no, inténtalood -t d1.Respuestas:
POSIX:
printf a | od -A n -t d1Perl:
perl -e 'print ord($ARGV[0])' aPerl, haciendo frente a UTF-8 si está en un entorno local UTF-8:
perl -C255 -e 'print ord($ARGV[0])' œfuente
POSIX:
También funciona con caracteres no ASCII en bash 4.0 y posterior y en zsh:
También puede usar
recode ..dumppara ver puntos de código hexadecimales:fuente
A=a ; printf '%d\n' "'$A'"y en ksh algo comoA=a; integer N=$(("'$A'")); print $N(no se necesita print o printf).Tal vez:
Salud
fuente
Una solución sin od, solo bash, y solo minúsculas, hasta ahora.
zes el personaje buscado, aquíscomo búsqueda.i=97porque ascii (a) = 97. El resto es obvio.Puede ponerlo en una sola línea, por supuesto. Aquí hay algunos punto y coma:
;;;;;(debería ser suficiente)fuente
read char; i=97; for c in {a..z}; do [ "$c" = "$char" ] && echo $i && break || ((i+=1)); donePruébalo
od -t d1si lo tienes. Los otros formatos de salida son bastante raros.Tampoco necesita cabeza y corte, por ejemplo:
fuente
Si solo desea un programa que haga esto y no lo está haciendo como ejercicio, entonces hay un programa llamado
asciique hace esto. Su distribución ya puede ofrecerla como un paquete, si no la obtiene de http://www.catb.org/~esr/ascii/ .fuente
fuente