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