이 오래된 질문을 되살려 서 죄송합니다. 그러나 사용하는 경우 bash
에도 일반 아스키 입력에서 유니 코드 코드 포인트를 만들 수있는 아주 쉬운 방법이 포크하지 않습니다 전혀은 :
unicode() { local -n a="$1"; local c; printf -vc '\\U%08x' "$2"; printf -va "$c"; }
unicodes() { local a c; for a; do printf -vc '\\U%08x' "$a"; printf "$c"; done; };
특정 코드 포인트를 정의하려면 다음과 같이 사용하십시오
unicode crossbones 0x2620
echo "$crossbones"
또는 첫 번째 65536 유니 코드 코드 포인트를 stdout에 덤프하려면 (내 컴퓨터에서 2 초 미만 걸립니다. 추가 공간은 쉘의 모노 스페이스 글꼴로 인해 특정 문자가 서로 흐르지 않도록하는 것입니다).
for a in {0..65535}; do unicodes "$a"; printf ' '; done
또는 매우 전형적인 부모님의 이야기를 들려줍니다 (유니 코드 2010이 필요합니다).
unicodes 0x1F6BC 32 43 32 0x1F62D 32 32 43 32 0x1F37C 32 61 32 0x263A 32 32 43 32 0x1F4A9 10
설명:
printf '\UXXXXXXXX'
모든 유니 코드 문자를 인쇄합니다
printf '\\U%08x' number
\UXXXXXXXX
16 진수로 변환 된 숫자로 인쇄 한 다음 printf
실제로 유니 코드 문자를 인쇄 하기 위해 다른 것으로 공급됩니다.
printf
8 진수 (0oct), 16 진수 (0xHEX) 및 10 진수 (0 또는 1 ~ 9로 시작하는 숫자)를 숫자로 인식하므로 가장 적합한 표현을 선택할 수 있습니다
printf -v var ..
포크없이printf
변수 의 출력을 수집합니다 (엄청나게 속도를 높입니다)
local variable
전역 네임 스페이스를 오염시키지 않아야합니까?
local -n var=other
할당이 변경 되도록 별칭 var
을로 other
지정합니다 . 여기서 흥미로운 부분 중 하나 는 로컬 네임 스페이스의 일부이고 전역 네임 스페이스의 일부입니다.
var
other
var
other
- 에
local
또는 global
네임 스페이스 와 같은 것이 없습니다 bash
. 변수는 환경에 유지되며 항상 전역 적입니다. Local은 현재 값을 저장하고 함수가 다시 떠날 때 복원합니다. 함수 내에서 호출 된 다른 함수에는 local
여전히 "로컬"값이 표시됩니다. 이것은 다른 언어에서 발견되는 모든 일반적인 범위 지정 규칙과 근본적으로 다른 개념입니다 (그리고 bash
매우 강력하지만이를 모르는 프로그래머라면 오류가 발생할 수 있습니다).
"\x7F"
합니다 (이는 UTF-8 로케일에서bash
태그가 당신이 제안) ... 패턴에 의해 표현 단일 바이트 된다 결코 범위\x80-\xFF
. 이 범위는 1 바이트 UTF-8 문자에서 유효하지 않습니다. 예를 들어, 유니 코드 코드 포인트 값U+0080
(예\x80
\xC2\x80