쉘 스크립트에서 서수(예: 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
이 줄을 다음과 같이 단축할 수 있습니다)bash
zsh
set
set {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
또는 다음에서 \0ooo
8진수 시퀀스를 사용하십시오 printf %b
.
$ printf '%b\n' "\0$(([##8]0x60 + 5))"
e
영어가 아닌 문자의 경우 UTF-8 로케일(여기서는 그리스어)을 가정합니다.
$ printf '%b\n' "\u$(([##16]0x3B0 + 5))"
ε
이는 유니코드의 문자 순서를 기반으로 하며 해당 순서가 해당 지역 언어의 일반적인 알파벳 순서와 일치한다는 보장이 없으므로 전체 문자 목록을 수동으로 하드코딩하고 첫 번째 형식을 사용할 수도 있습니다.
러시아 알파벳과 같습니다(Wikipedia에 따르면):
$ set а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
$ echo "$5"
д
이는 유니코드 순서와 정확히 일치하지 않습니다.