asciiコマンドなんかなくても困らないとはいえ

asciiコマンドなんかなくても困らないと言った手前、どう困らないのか書いとこうかな、と、自分の解だけでなく Google さんにアイディア募集したところ。

これはないなぁ。

1 me@host: ~$ echo "A" | tr -d "\n" | od -An -t dC
2    65
3 me@host: ~$ echo "[" | tr -d "\n" | od -An -t dC
4    91

「learn unix and linux commands」を冠するサイトが、「Hi gurus,」に応えて「最も深遠な」答えで煙に巻いてるとしか思えない。こんなん記憶出来んし。毎日使うようなものじゃないからこそ、記憶しやすいもんじゃねーと。

configure スクリプトじゃないんだから、tr なんか使わずに(昔は悪名高かった)echo -n に依存しちゃえばいいと思うし、perl も入ってない「Unix的環境」なんかいまどきないんだから、せめて perl でしょうに。(あるいは printf 「コマンド」でもいい。)

「printfコマンド」はアタシが学生だった頃には「どこにいってもある」ものではなく、移植性のない方法、だったのだけれど、今はどんな「Unix的環境」にも入ってる:

1 me@host: ~$ printf "%d\n" "'A"
2 65

今 Unix 初心者に真っ先に教えるなら、これなんだと思うよ。('Aが記憶しにくいよね、でも。)

ただアタシはやっぱこの場合は perl かなぁ:

1 me@host: ~$ perl -e 'printf("%d\n", ord("A"))'
2 65

やっぱワンライナーには perl がいい。(ワタシは perl は嫌いだよ。けどそれは「スクリプトとして」使う場合の perl が嫌いなだけ。)

python はワンライナーには向かないし、「どんな Unix 的環境にでもある」わけではないけど、やるならたとえばこうね:

1 me@host: ~$ python -c 'v = "[" ; print(v, ord(v))'
2 ('[', 91)

ところで「Using only basic awk (not even gawk, so the below should work on all BSD and Linux variants):」なんてなマゾヒスティックな解もありました:

1 me@host: ~$ echo a | awk \
2 > 'BEGIN { for (n = 0; n < 256; n++) ord[sprintf("%c", n)] = n; } { print ord[$1]; }'
3 97
4 me@host: ~$ echo 97 | awk \
5 > 'BEGIN { for (n = 0; n < 256; n++) { chr[n] = sprintf("%c", n); } } { print chr[$1]; }'
6 a