我正在尝试编写一个 shell 脚本,它要求 AZ 或 az 范围内的 ASCII 字符并返回其等效的数值。例如,输出可能如下所示:
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 " "
答案1
POSIX:
$ printf %d\\n \'a
97
它也适用于 bash 4.0 及更高版本以及 zsh 中的非 ASCII 字符:
$ printf %x\\n \'あ
3042
您还可以使用recode ..dump
查看十六进制代码点:
$ printf aあ|recode ..dump
UCS2 Mne Description
0061 a latin small letter a
3042 a5 hiragana letter a
答案2
POSIX:printf a | od -A n -t d1
珀尔:perl -e 'print ord($ARGV[0])' a
Perl,如果在 UTF-8 语言环境中则处理 UTF-8:perl -C255 -e 'print ord($ARGV[0])' œ
答案3
或许:
#!/bin/bash
echo -n "Enter a letter:"
read A
echo ${A}|od -t d1|awk '{printf "%s",$2}';echo
干杯
答案4
od -t d1
如果你有的话试试吧。其他输出格式很奇怪。
您也不需要头部和切口,例如:
printf "A" | od -t d1 | read addr num && echo $num