쉘 스크립트에서 서수를 알파벳으로 매핑

쉘 스크립트에서 서수를 알파벳으로 매핑

쉘 스크립트에서 서수(예: 1, 2, 3, ...)를 문자 a, b, c에 매핑하는 간단한 솔루션이 있습니까?

답변1

Bourne과 같은 쉘에서:

$ set a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo "$5"
e

(최신 버전에서는 또는 ksh93이 줄을 다음과 같이 단축할 수 있습니다)bashzshsetset {a..z}

또는:

$ awk 'BEGIN{printf("%c\n", 0x60 + 5)}'
e

일부 구현에서는 dc(적어도 GNU dc):

$ echo 96 5 + P | dc
e

Pass 하면 zsh기본 36을 사용할 수 있습니다.

$ echo $(([##36] 9 + 5))
E

또는 다음에서 \0ooo8진수 시퀀스를 사용하십시오 printf %b.

$ printf '%b\n' "\0$(([##8]0x60 + 5))"
e

영어가 아닌 문자의 경우 UTF-8 로케일(여기서는 그리스어)을 가정합니다.

$ printf '%b\n' "\u$(([##16]0x3B0 + 5))"
ε

이는 유니코드의 문자 순서를 기반으로 하며 해당 순서가 해당 지역 언어의 일반적인 알파벳 순서와 일치한다는 보장이 없으므로 전체 문자 목록을 수동으로 하드코딩하고 첫 번째 형식을 사용할 수도 있습니다.

러시아 알파벳과 같습니다(Wikipedia에 따르면):

$ set а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
$ echo "$5"
д

이는 유니코드 순서와 정확히 일치하지 않습니다.

관련 정보