Escape Sequences
다음과 같은 경우에서 escape 문자가 처리됩니다.
모두 동일하게 처리되는 것은 아니고 조금씩 틀린부분이 있습니다.
echo -e" "or' '에서$' '- printf
" "or' '에서 - printf
%b에서
sh에서는 echo 명령을 사용할때 기본적으로" ",' '에서 escape 문자가 처리 됩니다.
따로 명령에 -e 옵션이 없습니다.
| Escape Sequence | Character represented | 적용 |
|---|---|---|
| \\ | backslash | * |
| \a | alert (bell) | * |
| \b | backspace | * |
| \e | escape (ASCII 033) | * |
| \f | form feed | * |
| \n | newline | * |
| \r | carriage return | * |
| \t | horizontal tab | * |
| \v | vertical tab | * |
| \' | single quotes | printf$' ' |
| \" | double quotes | * |
| \? | question mark | printf$' ' |
| \<NNN> | 8 비트 문자로 N 은 8 진수 값입니다. ( 1 ~ 3 개 ) |
printf$' ' |
| \0<NNN> | 8 비트 문자로 N 은 8 진수 값입니다. ( 1 ~ 3 개 ) |
echo |
| \x<HH> | 8 비트 문자로 H 은 16 진수 값입니다. ( 1 ~ 2 개 ) |
* |
| \u<HHHH> | 유니코드 문자 입니다. H 는 16 진수 값입니다. ( 1 ~ 4 개 ) |
* |
| \U<HHHHHHHH> | 유니코드 문자 입니다. H 는 16 진수 값입니다. ( 1 ~ 8 개 ) |
* |
| \c | 이후의 스트링은 출력에서 제외됩니다. | echo |
| \cx | Ctrl-x 문자, 가령 $'\cz' 는 Ctrl-z (^Z) |
$' ' |
적용의
*문자는 모두를 뜻합니다.
sh 과 bash 에서의 8 진수 16진수 처리
- 먼저 sh 에서는 echo, printf 문에서 16 진수 형식을 사용할 수 없습니다.
- bash 의 경우 echo, printf,
$' '에서 조금씩 차이가 있습니다.
그러므로 sh 과 bash 에서 공통적으로 사용하려면 8 진수 형식을 사용해야 합니다.
################# sh 은 8 진수 형식만 사용가능 #################
sh$ echo '\101\102\103'
ABC
sh$ echo '\0101\0102\0103'
ABC
sh$ echo '\x41\x42\x43' # \x<HH> 16 진수 안됨
\x41\x42\x43
.............................................................
sh$ printf '\101\102\103\n'
ABC
sh$ printf '\0101\0102\0103\n' # \0<NNN> 8 진수 안됨
3
sh$ printf '\x41\x42\x43\n' # \x<HH> 16 진수 안됨
\x41\x42\x43
.............................................................
sh$ printf '%b' '\101\102\103\n'
ABC
sh$ printf '%b' '\0101\0102\0103\n'
ABC
sh$ printf '%b' '\x41\x42\x43\n' # \x<HH> 16 진수 안됨
\x41\x42\x43
###################### bash 의 경우 #########################
bash$ echo -e '\101\102\103' # \<NNN> 8 진수 안됨
\101\102\103
bash$ echo -e '\0101\0102\0103'
ABC
bash$ echo -e '\x41\x42\x43'
ABC
.............................................................
bash$ echo $'\101\102\103'
ABC
bash$ echo $'\0101\0102\0103' # \0<NNN> 8 진수 안됨
3
bash$ echo $'\x41\x42\x43'
ABC
.............................................................
bash$ printf '\101\102\103\n'
ABC
bash$ printf '\0101\0102\0103\n' # \0<NNN> 8 진수 안됨
3
bash$ printf '\x41\x42\x43\n'
ABC
.............................................................
bash$ printf '%b' '\101\102\103\n'
ABC
bash$ printf '%b' '\0101\0102\0103\n'
ABC
bash$ printf '%b' '\x41\x42\x43\n'
ABC
Quiz
sh 에서의 echo 명령과, bash 에서의 echo 명령을 구분하려면?
if [ "$(echo "x\c")" = "x" ]; then ECHO="echo" # sh
elif [ "$(echo -e "x\c")" = "x" ]; then ECHO="echo -e" # bash
fi