Я пытаюсь написать сценарий оболочки, который запрашивает символ ASCII в диапазоне AZ или az и возвращает его эквивалентное числовое значение. Например, вывод может выглядеть следующим образом:
scarlet$ Please type a character between A and Z or between a and z:
scarlet$ A
scarlet$ The decimal value of A is: 65
Моя попытка:
#!/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
источник
источник
echo -n A
то, что вы ожидаете? Если нет, попробуйтеprintf
вместо этого. Делает лиod -i
то, что вы ожидаете? Если нет, попробуйтеod -t d1
.Ответы:
POSIX:
printf a | od -A n -t d1
Perl:
perl -e 'print ord($ARGV[0])' a
Perl, справляющийся с UTF-8, если в локали UTF-8:
perl -C255 -e 'print ord($ARGV[0])' œ
источник
POSIX:
Он также работает с не-ASCII-символами в bash 4.0 и более поздних версиях и в zsh:
Вы также можете использовать,
recode ..dump
чтобы увидеть шестнадцатеричные кодовые точки:источник
A=a ; printf '%d\n' "'$A'"
и на ksh что-то вродеA=a; integer N=$(("'$A'")); print $N
(print или printf не нужны).Может быть:
ура
источник
Решение без шансов, просто bash и просто строчные, пока.
z
это искомый символ, здесьs
как поиск.i=97
потому что ASCII (а) = 97. Остальное очевидно.Вы можете поместить это в одну строку, конечно. Вот несколько точек с запятой:
;;;;;
(должно быть достаточно)источник
read char; i=97; for c in {a..z}; do [ "$c" = "$char" ] && echo $i && break || ((i+=1)); done
Попробуй,
od -t d1
если есть. Другие форматы вывода довольно странные.Вы также не нуждаетесь в голове и сокращении, например:
источник
Если вы просто хотите программу, которая делает это, и вы не делаете это как упражнение, то есть программа,
ascii
которая делает это. Ваш дистрибутив может уже предлагать его в виде пакета, если не получить его с http://www.catb.org/~esr/ascii/ .источник
источник