어쩌면 내 질문에 간접적으로 대답하는 답변이 이미 있을 수도 있지만, 그 중 많은 답변을 읽었지만 아직 이 차이점에 대한 만족스러운 답변을 찾지 못했습니다.
캐리지 리턴의 원래 의미는 구식 텔레프린터에서 유래했습니다. 이는 프린트 헤드를 현재 줄의 왼쪽으로 이동하는 것을 의미했습니다. 현재 줄에 계속해서 쓰면 이미 쓴 내용을 덮어쓰게 됩니다. 오늘날 우리는 \r
문자열에 명시적으로 입력되는 텍스트 기호를 사용하여 이 동작을 지정할 수 있습니다 . 예를 들어 Python에서는 을 실행할 수 print('hello\rgoodbye')
있고 터미널에서는 을 실행할 수 echo $'hello\rgoodbye'
있으며 두 경우 모두 만 표시됩니다 goodbye
.
반대로 의사 캐리지 리턴은 ASCII 제어 문자 ^M
( Ctrl-M
또는 로 입력 )를 사용하여 Enter
대화식으로 삽입 할 수도 있습니다. 캐리지 리턴으로 널리 알려져 있지만 놀랍게도 insert 가 아니라 새 줄의 기호인 \r
insert 이기 때문에 의사 캐리지 리턴이라고 부릅니다.\n
따라서 대화형 입력 hello
, then Ctrl-M
, then 은 goodbye
놀랍게도 와 동등한 기능을 갖지 않지만 hello\rgoodbye
과 동등한 기능을 갖습니다 hello\ngoodbye
.
이것은 모순되지 않습니까? 이것의 근거는 무엇입니까?
답변1
이는 터미널 입력 처리의 결과입니다. 기본적으로 터미널 장치 드라이버(터미널 자체가 아닌 터미널의 입력을 처리하는 운영 체제 커널의 소프트웨어)는 다음을 CtrlM실행 CtrlJ하여 이를 확인할 수 있습니다.
od -t x1
그런 다음 두 문자를 입력합니다.
$ od -t x1
^M
^J
^D
0000000 0a 0a
0000002
^M
( 화면에는 등이 표시 되지 않습니다 .)
따라서 를 입력할 때 CtrlM어떤 프로그램이 입력을 처리하는지에 관계없이 캐리지 리턴 문자가 아닌 줄바꿈 문자가 표시됩니다.
이는 구성될 수 있습니다 stty icrnl
. 바라보다Return, Enter 및 stty icrlf에 대해 알아보기비슷한 질문에 대해서는.