echo
내장 문서 에 따르면 printf
, \033
및 는 \x1b
모두 동일한 ASCII 제어 코드( Esc, 십진수 27)로 변환되어야 합니다.
간단한 명령 \x1b
과 동일하게 작동 하지만 프롬프트 변수(예 : Why?) 에서는 서로 바꿔서 사용할 수 없습니다 .\033
echo -e
PS1
답변1
Bash에는 이를 해석할 수 있는 조항이 없기 때문입니다. 그림에서 알 수 있듯이힌트매뉴얼 페이지의 섹션에서는 bash(1)
임의의 문자에 대해 8진수 이스케이프만 허용됩니다.
에 관해서는왜이 누락이 존재하며 POSIX sh와의 호환성을 위한 것이라고 추측할 수 있지만 Bash FAQ 버전 4.12에서도 아직 이 주제를 다루지 않기 때문에 Chet Ramey에게 직접 문의해야 합니다.
답변2
재 껍질:
\x1b
Busybox v1.33.1로 컴파일된 ASH Shell이 이를 올바르게 해석하는 것을 확인할 수 있습니다 .
Ignacio Vazquez-Abrams의 답변에 추가하기 위해 BASH가 여전히 일반적인 "인쇄" 유틸리티를 사용하여 16진수 이스케이프 패턴을 인쇄하는 이유는 이러한 항목을 처리하기 위해 인코딩되었기 때문입니다. 각 실행 파일에 대한 다음 매뉴얼 페이지 발췌를 참조하십시오.
echo -e '\x61'
-e enable interpretation of backslash escapes
\xHH byte with hexadecimal value HH (1 to 2 digits)
printf '\x61\n'
\xHH byte with hexadecimal value HH (1 to 2 digits)
bash
방금
\e
An escape character.
\nnn
The character whose ASCII code is the octal value nnn.
추신.:
- 방금 아이패드로 사용해봤는데iSH 앱
/bin/ash -> /bin/busybox
, 기본 쉘로 실행됩니다.