에서 printf '%s\t%s\n' foo bar
, printf
출력을한다 foo<TAB>bar<LF>
.
f
, o
, b
, a
및 r
단일 폭 그래픽 문자입니다.
이러한 문자를 수신하면 터미널은 해당 글리프를 표시하고 커서가 이미 화면의 오른쪽 가장자리 (원래 텔레 타이프 라이터의 용지)에 도달하지 않는 한 열을 오른쪽으로 이동합니다. 화면의 왼쪽 가장자리로 돌아가거나 (줄 바꿈) 터미널과 구성 방법에 따라 문자를 버립니다.
<Tab>
그리고 <LF>
두 가지 제어 문자. <LF>
(일명 줄 바꿈)은 Unix 텍스트의 줄 구분 기호이지만 터미널의 경우 줄을 공급합니다 (커서를 한 위치 아래로 이동). 따라서 커널의 터미널 드라이버는 실제로 <CR>
(화면의 왼쪽 가장자리로 돌아 가기), <LF>
(커서 아래로) ( stty onlcr
일반적으로 기본적으로 켜져 있음)로 변환합니다.
<Tab>
공백으로 공백을 채우지 않고 터미널을 커서를 다음 탭 정지 점으로 이동하도록 지시합니다 (대부분의 터미널에서 기본적으로 8 개의 위치는 있지만 아무 곳에 나 설정하도록 구성 할 수 있음).
따라서 커서가 빈 줄의 시작 부분에있는 동안 탭이 8 열마다 중지되는 터미널에 해당 문자가 전송되면 다음과 같은 결과가 발생합니다.
foo bar
해당 라인의 화면에 인쇄됩니다. 커서가을 포함하는 행에서 세 번째 위치에있는 동안 전송 xxxxyyyyzzzz
되면 다음과 같은 결과가 발생합니다.
xxfooyyybarz
테이블을 지원하지 않는 터미널에서는 해당 탭을 일련의 공백으로 변환하도록 터미널 드라이버를 구성 할 수 있습니다. ( stty tab3
).
원래 텔레 타이프라이터의 SPC 문자는 커서를 오른쪽으로 이동하고 백 스페이스 ( \b
)는 왼쪽으로 이동합니다. 이제 현대 터미널에서 SPC는 오른쪽으로 이동하고 지 웁니다 (예상 한대로 공백 문자를 씁니다). 따라서 펜던트는 \b
ASCII보다 새로운 것이어야합니다. 가장 현대적인 터미널에서 실제로 일련의 문자이다 : <Esc>
, [
, C
.
n
문자를 왼쪽, 오른쪽, 위, 아래 또는 화면의 임의의 위치 로 이동시키는 이스케이프 시퀀스가 더 있습니다. 화면의 선 또는 영역의 일부를 지우는 (공백으로 채워지는) 다른 이스케이프 시퀀스가 있습니다.
이러한 시퀀스는 일반적으로 같은 시각적 애플리케이션에 의해 사용되는 vi
, lynx
, mutt
, dialog
텍스트 화면에서 임의의 위치에 기록된다.
이제 모든 X11 터미널 에뮬레이터와 GNU와 같은 X11이 아닌 다른 것들은 screen
복사 붙여 넣기를위한 화면 영역을 선택할 수있게합니다. vi
편집기 에서 볼 수있는 부분을 선택하면 해당 출력을 생성하는 데 사용 된 모든 이스케이프 시퀀스를 복사하지 않습니다. 거기에 표시되는 텍스트를 선택하려고합니다.
예를 들어 다음을 실행하는 경우 :
printf 'abC\rAC\bB\t\e[C\b\bD\n'
입력 편집기 세션을 시뮬레이션하는 abC
대체, 처음으로 돌아가 ab
과 AC
, C
함께 B
입력 한 다음, 왼쪽으로 다음, 오른쪽으로 한 후, 다음 탭 정지에, 두 개의 열을 한 번 더 열을 이동 D
.
당신은 볼 :
ABC D
즉, ABC
4 열 간격과 D
입니다.
마우스로 xterm
또는 putty
을 사용하여 선택 ABC
하면 4 개의 공백 문자가 D
아닌 선택 영역에 저장됩니다 abC<CR>AC<BS>B<Tab><Esc>[C<BS><BS>D
.
선택에서 끝나는 printf
것은 터미널 드라이버와 터미널 에뮬레이터에 의해 전송 되었지만 후 처리 된 것입니다.
변형의 다른 종류의 볼 <U+0065><U+0301>
( e
합성 급성 악센트 하였다)로 변경 <U+00E9>
( é
예비 이루어지는 형태)에 의해 xterm
.
또는 . 후에 터미널로 보내기 전에 터미널 드라이버 echo abc
에 ABC
의해 변환됩니다 stty olcuc
.
이제는 실제로 텍스트 파일 ( MSDOS 텍스트 파일 및 페이지 나누기) 에있는 몇 가지 제어 문자 중 하나 <Tab>
와 같습니다 .<LF>
<CR>
<FF>
따라서 일부 터미널 에뮬레이터는 가능한 경우 복사-붙여 넣기 버퍼에 복사하여 복사를 선택합니다 (일반적으로 그렇지는 <CR>
않습니다 <LF>
).
예를 들어와 같은 VTE 기반 터미널 에서 빈 줄 gnome-terminal
의 출력을 선택할 때 실제로는 7 개의 공백과 X 대신에 X11 선택 항목에 저장 되는 것을 볼 수 있습니다.printf 'a\tb\n'
gnome-terminal
a\tb
a
b
그러나의 출력 printf 'a\t\bb\n'
,이를 저장 a
, 6 개 및 공간 b
등에 대한 printf 'a\r\tb\n'
, a
7 개 공간과 b
.
printf 'a \nb\n'
보이지 않는 후행 공간이 유지 되는 곳에서 실행 후 두 줄을 선택할 때처럼 터미널이 실제 입력을 복사하려고하는 다른 경우 가 있습니다. 또는 두 줄을 선택할 때 두 줄이 오른쪽 여백으로 줄 바꿈 될 때 LF 문자가 포함되지 않습니다.
이제 printf
CLIPBOARD X11
select에 출력을 저장하려면 다음과 같이 직접 수행하는 것이 가장 좋습니다.
printf 'foo\tbar\n' | xclip -sel c
주 당신이 있음을 붙여 넣을 때 xterm
대부분의 다른 단자 나, xterm
실제로 대체 \n
와 \r
그 문자 때문에 xterm
누를 때 전송 Enter(그리고 터미널 드라이버가 다시로 번역 할 수있다 \n
).