Это работает (со значением в восьмеричном формате):
$ printf '%b' '\101'
A
даже для (некоторые: не превышайте 7) последовательностей:
$ printf '%b' '\'{101..107}
ABCDEFG
Общая конструкция, допускающая (десятичные) значения в любом диапазоне:
$ printf '%b' $(printf '\\%03o' {65..122})
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
Или вы можете использовать шестнадцатеричные значения символов:
$ printf '%b' $(printf '\\x%x' {65..122})
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
Вы также можете вернуть символ с помощью xxd (используйте шестнадцатеричные значения):
$ echo "41" | xxd -p -r
A
То есть одно действие противоположно другому:
$ printf "%x" "'A" | xxd -p -r
A
А также работает сразу с несколькими шестнадцатеричными значениями:
$ echo "41 42 43 44 45 46 47 48 49 4a" | xxd -p -r
ABCDEFGHIJ
или последовательности (здесь для получения шестнадцатеричных значений используется printf):
$ printf '%x' {65..90} | xxd -r -p
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Или даже используйте awk:
$ echo 65 | awk '{printf("%c",$1)}'
A
даже для последовательностей:
$ seq 65 90 | awk '{printf("%c",$1)}'
ABCDEFGHIJKLMNOPQRSTUVWXYZ