Bash에서 이 줄을 쓸 때
new_line="new\nline"
예상되는 결과를 얻습니다.
echo $new_line
new\nline
이것은 예상대로 작동합니다.
echo -e $new_line
new
line
매뉴얼에 명시된 바와 같이: -e enable interpretation of backslash escapes
그러나 이것은 해석된 개행 문자를 제공하지 않습니다 \n
.
cur_log=$(who)
echo -e $cur_log
myuser pts/0 2017-01-19 07:10 (:0) myuser pts/1 2017-01-19 09:26 (:0) myuser pts/4 2017-01-19 09:14 (:0)
나는 줄 바꿈이 없다고 생각하지만 다음과 같이 쓴다면:
echo "$cur_log"
개행 문자에 대한 설명을 듣습니다.
myuser pts/0 2017-01-19 07:10 (:0)
myuser pts/1 2017-01-19 09:26 (:0)
myuser pts/4 2017-01-19 09:14 (:0)
echo -e $cur_log
개행 문자는 해석 되지 않지만 `echo -e $new_line은 해석되는 이유는 무엇 입니까?
답변1
그 이유는 첫 번째 변수( )에는 변경되지 않은 상태로 전달되는 이스케이프 시퀀스(즉 = 다음에 = ) new_line
만 있고 두 번째 변수( )에는 실제 개행 문자가 있기 때문입니다. 이러한 개행 문자는 다음과 같이 변수에서 제거됩니다. 쉘의 일부 .\n
backslash
n
echo
cur_log
IFS
Unix/Linux에서는 새 줄이 문자입니다.ASCII 코드코드는 10
(개행)입니다. 이 문자가 포함된 파일이 화면에 표시되면 캐리지 리턴과 줄 바꿈( CR-LF
), 10
+ 의 두 문자로 변환됩니다 13
. 이와 같은 편집기는 gedit
이와 같은 파일을 열 때 각 줄을 개별적으로 저장합니다. 줄바꿈은 연속된 두 줄 사이의 간격을 감지하는 데에만 사용됩니다. \n
ASCII 92
+ 의 두 문자로 구성됩니다 110
. 이 두 문자가 포함된 파일을 편집하면 파일은 \n
실제 개행 문자와 달리 변경되지 않고 그대로 나타납니다.