Saya mencoba menulis skrip shell yang meminta karakter ASCII dalam rentang AZ atau az dan mengembalikan nilai numerik yang setara. Sebagai contoh, output mungkin terlihat seperti berikut:
scarlet$ Please type a character between A and Z or between a and z:
scarlet$ A
scarlet$ The decimal value of A is: 65
Usaha saya:
#!/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
sumber
sumber
echo -n A
melakukan apa yang Anda harapkan? Jika tidak, cobaprintf
saja. Apakahod -i
melakukan apa yang Anda harapkan? Jika tidak, cobaod -t d1
.Jawaban:
POSIX:
printf a | od -A n -t d1
Perl:
perl -e 'print ord($ARGV[0])' a
Perl, mengatasi UTF-8 jika di lokal UTF-8:
perl -C255 -e 'print ord($ARGV[0])' œ
sumber
POSIX:
Ini juga berfungsi dengan karakter non-ASCII di bash 4.0 dan yang lebih baru dan di zsh:
Anda juga dapat menggunakan
recode ..dump
untuk melihat poin kode heksadesimal:sumber
A=a ; printf '%d\n' "'$A'"
dan pada ksh sesuatu sepertiA=a; integer N=$(("'$A'")); print $N
(cetak atau printf tidak diperlukan).Mungkin:
Bersulang
sumber
Solusi yang kurang baik, hanya bash, dan hanya huruf kecil, sejauh ini.
z
adalah karakter yang dicari, di sinis
sebagai pencarian.i=97
karena ascii (a) = 97. Sisanya jelas.Anda bisa memasukkannya ke dalam satu baris saja. Berikut adalah beberapa semikolon:
;;;;;
(harus cukup)sumber
read char; i=97; for c in {a..z}; do [ "$c" = "$char" ] && echo $i && break || ((i+=1)); done
Coba
od -t d1
jika Anda memilikinya. Format output lainnya cukup aneh.Anda juga tidak perlu kepala dan potong, misalnya:
sumber
Jika Anda hanya ingin program yang melakukan ini dan Anda tidak melakukan ini sebagai latihan, maka ada program yang disebut
ascii
yang melakukan ini. Distro Anda mungkin sudah menawarkannya sebagai paket, jika tidak mendapatkannya dari http://www.catb.org/~esr/ascii/ .sumber
sumber