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 A
lo que esperas? Si no, intente en suprintf
lugar. ¿Haceod -i
lo que esperas? Si no, inténtalood -t d1
.Respuestas:
POSIX:
printf a | od -A n -t d1
Perl:
perl -e 'print ord($ARGV[0])' a
Perl, 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 ..dump
para 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.
z
es el personaje buscado, aquís
como búsqueda.i=97
porque 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)); done
Pruébalo
od -t d1
si 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
ascii
que hace esto. Su distribución ya puede ofrecerla como un paquete, si no la obtiene de http://www.catb.org/~esr/ascii/ .fuente
fuente