Hos*_*ost 11 scripting text-processing od
我正在尝试编写一个 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
Run Code Online (Sandbox Code Playgroud)
我的尝试:
#!/bin/bash
echo Enter a letter:
read A
echo -n ${A} | od -i | head -1 | cut -b 10- | tr -d " "
Run Code Online (Sandbox Code Playgroud)
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])' œ
POSIX:
$ printf %d\\n \'a
97
Run Code Online (Sandbox Code Playgroud)
它也适用于 bash 4.0 及更高版本和 zsh 中的非 ASCII 字符:
$ printf %x\\n \'?
3042
Run Code Online (Sandbox Code Playgroud)
您还可以使用recode ..dump
查看十六进制代码点:
$ printf a?|recode ..dump
UCS2 Mne Description
0061 a latin small letter a
3042 a5 hiragana letter a
Run Code Online (Sandbox Code Playgroud)
od -t d1
如果你有的话试试吧。其他输出格式很奇怪。
您也不需要头部和切口,例如:
printf "A" | od -t d1 | read addr num && echo $num
Run Code Online (Sandbox Code Playgroud)