echo -e가 새 줄을 해석하지 않는 이유는 무엇입니까?

echo -e가 새 줄을 해석하지 않는 이유는 무엇입니까?

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만 있고 두 번째 변수( )에는 실제 개행 문자가 있기 때문입니다. 이러한 개행 문자는 다음과 같이 변수에서 제거됩니다. 쉘의 일부 .\nbackslashnechocur_logIFS

Unix/Linux에서는 새 줄이 문자입니다.ASCII 코드코드는 10(개행)입니다. 이 문자가 포함된 파일이 화면에 표시되면 캐리지 리턴과 줄 바꿈( CR-LF), 10+ 의 두 문자로 변환됩니다 13. 이와 같은 편집기는 gedit이와 같은 파일을 열 때 각 줄을 개별적으로 저장합니다. 줄바꿈은 연속된 두 줄 사이의 간격을 감지하는 데에만 사용됩니다. \nASCII 92+ 의 두 문자로 구성됩니다 110. 이 두 문자가 포함된 파일을 편집하면 파일은 \n실제 개행 문자와 달리 변경되지 않고 그대로 나타납니다.

관련 정보