가치있는 성격의 작품 :
$ printf "%d\n" \'A
65
$
두 가지 질문이 있습니다. 첫 번째 질문이 가장 중요합니다.
- 65를 어떻게 A로 바꾸나요?
- \ 'A는 printf를 사용하여 ASCII 문자를 그 값으로 변환합니다. 구문 이 printf에 고유 합니까 아니면 BASH의 다른 곳에서 사용됩니까? (이러한 작은 문자열은 Google이 찾기 어렵습니다.)
가치있는 성격의 작품 :
$ printf "%d\n" \'A
65
$
두 가지 질문이 있습니다. 첫 번째 질문이 가장 중요합니다.
답변:
이것은 작동합니다 (8 진수 값으로) :
$ printf '%b' '\101'
A
심지어 (일부 : 7 개를 넘지 마십시오) 시퀀스 :
$ printf '%b' '\'{101..107}
ABCDEFG
모든 범위에서 (십진수) 값을 허용하는 일반적인 구조는 다음과 같습니다.
$ printf '%b' $(printf '\\%03o' {65..122})
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
또는 문자의 16 진수 값을 사용할 수 있습니다.
$ printf '%b' $(printf '\\x%x' {65..122})
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
xxd (16 진수 값 사용)를 사용하여 문자를 다시 가져올 수도 있습니다.
$ echo "41" | xxd -p -r
A
즉, 한 작업은 다른 작업의 반대입니다.
$ printf "%x" "'A" | xxd -p -r
A
또한 한 번에 여러 16 진수 값으로 작동합니다.
$ echo "41 42 43 44 45 46 47 48 49 4a" | xxd -p -r
ABCDEFGHIJ
또는 시퀀스 (여기에서는 16 진수 값을 얻기 위해 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
두 번째 질문에 대해 선행 인용 구문 ( \'A
)은 다음과 관련된 것 printf
같습니다.
선행 문자가 작은 따옴표 또는 큰 따옴표 인 경우 값은 작은 따옴표 또는 큰 따옴표 다음에 오는 문자의 기본 코드 집합에있는 숫자 값이어야합니다.
에서 http://pubs.opengroup.org/onlinepubs/009695399/utilities/printf.html
이런 종류의 변환에는 perl을 사용합니다.
perl -e 'printf "%c\n", 65;'
문자의 ASCII 값을 저장하려면 : (BASH에서이 작업을 수행했고 작동했습니다)
{
char="A"
testing=$( printf "%d" "'${char}" )
echo $testing}
출력 : 65
65
16 진수 로 변환하면 다음과 0x41
같습니다.
$ echo -e "\x41"
A
$ printf "\x41"