나는 그것을 연주하고 싶다 find -fprintf
. 무엇을 하는지 모른다면 이름을 지정한 파일에 쓰는 것과 같습니다 -fprintf
.-printf
이제 다음과 같은 명령을 실행하면:
find -maxdepth 1 -type d -fprintf output "%p\b\n"
output
나는 ( vim
거의 모든 텍스트 편집기를 사용하여) 다음을 얻습니다 .
.^H
./directory-1^H
./directory-2^H
./directory-3^H
^H
백스페이스 문자인 것으로 알고 있습니다 . 시작 :output
less
./directory-
./directory-
./directory-
따라서 질문은 다음과 같습니다.
- 왜
vim
다른 텍스트 편집기(시도nano
및 시도emacs
)는 앞에 있는 문자를 삭제하여 설명하지 않고 백스페이스 키를 표시하지만less
백스페이스 키를 표시합니까? - 편집기가
\n
개행 문자 대신 문자를 인쇄하지 않는 이유는 무엇입니까? - 백스페이스 키를 인쇄하는 것과 키보드의 백스페이스 키를 누르는 것의 차이점은 무엇입니까(키보드의 백스페이스 키를 누르면 실제로 문자가 삭제됩니다)?
어디에서나 SSH를 사용하지 않고 내 컴퓨터(노트북)에서 실행합니다. konsole 및 tmux와 함께 GNU/Linux Ubuntu 16.04 LTS를 사용합니다.
답변1
vim 및 기타 텍스트 편집기(nano 및 emacs 사용)에서 백스페이스 키를 해석하지 않고 앞의 문자를 삭제하여 표시하지만 그보다 적은 이유는 무엇입니까?
그들은 왜 이런 일을 하는가? FWIW, 브라우저도 마찬가지입니다 :-)
$ printf "<html>foo\bbar</html>" > /tmp/foo.html
$ firefox /tmp/foo.html
*foo*
미니 마크다운 이나 와 같이 편집자가 해석해야 하는 다른 유형의 마크업이 있습니까 **bar**
?
백스페이스 키는 이전 문자를 '삭제'할 뿐만 아니라 less
대략적인 형식 지정 문자 역할도 한다는 점에 유의하세요. 는 굵은 글씨로 인쇄되고 x\bx
밑줄이 그어집니다(일부 터미널에서는 다른 색상으로 인쇄됩니다).x
x\b_
printf "H\b_e\b_r\b_e\b_'s\bs Johnny!" | less
편집기가 줄 바꿈 대신 \n 문자를 인쇄하지 않는 이유는 무엇입니까?
그들은 이것을 할 수 있습니다. 예를 들어 :set list
in 을 사용하면 vi
줄 바꿈은 로 인쇄되고 $
탭은 으로 인쇄됩니다 ^I
.
백스페이스를 인쇄하는 것과 키보드의 백스페이스 키를 누르는 것의 차이점은 무엇입니까(키보드의 백스페이스 키를 누르면 실제로 문자가 삭제됩니다)?
하드형 터미널(종이에 인쇄)에서 백스페이스를 인쇄하면 캐리지가 왼쪽으로 한 위치 이동하므로 다음 문자는씌우다, 이미 종이에 있는 내용을 삭제하는 대신. 유리(CRT) 및 아날로그 터미널에서 위치를 왼쪽으로 이동하고 문자를 쓰면 문자를 완전히 대체하므로 "지우기" 효과가 있습니다. 그러나 \b
그 자체로는 아무것도 삭제되지 않습니다. not printf "123\b\n"
인쇄됩니다 .123
12
후자는 일부 입력 문자를 편집/제어 명령으로 해석하는 tty 드라이버의 기능입니다( 전체 목록은 erase
, werase
, intr
, kill
-- 참조 stty(1)
또는 termios(3)
매뉴얼 페이지 참조).
백스페이스 키도 작동합니다아니요항상 \b
/ ^H
(BS) 문자를 생성합니다. 대부분의 경우 \x7f
/ ^?
(DEL) 입니다 .
하지만 원하는 값으로 설정할 수 있습니다.
$ stty erase '#'
지금을 클릭하면 #
unix v7에서와 마찬가지로 이전 문자가 삭제됩니다.
답변2
파일 내용은 응용 프로그램으로 구성됩니다.
Unix 디자인의 특징 중 하나는 파일이 구별되지 않은 바이트 시퀀스이며 이를 원하는 대로 해석하는 것은 응용 프로그램에 달려 있다는 것입니다. 응용 프로그램은 파일 내용을 다르게 해석할 수 있고 해석하며, 그렇게 하면 결과가 발생하게 됩니다.
VIM은 Single Unix 사양의 개념에 따라 파일 내용을 해석합니다.텍스트 파일는 문자로 끝나고 문자가 ␊
포함되지 않은 0개 이상의 줄로 ␀
구성된 파일 입니다. 인쇄할 수 없는 문자를 다양한 인쇄 가능한 표현으로 변환하지만 ␊
개념의 일부이기 때문에 항상 줄 끝입니다.
다른 유틸리티는 파일 내용을 다르게 해석합니다. 한 시리즈는 파일 내용을 Teletype Model 37(TTY-37) 출력 데이터 스트림으로 해석합니다. 이 시리즈 에는 less
, more
, most
, ul
, colcrt
, 비기본 모드 등 여러 가지 전통적인 Unix 및 GNU 프로그램이 포함되어 있습니다. 이 해석에서 캐릭터는 (개념적) 프린트 헤드를 한 위치 뒤로 이동하고ncal
grotty
␈
불다이전에는 무엇이 있었습니까? 이러한 프로그램은 종이에 잉크를 사용한 물리적 TTY-37이 아니기 때문에 재입력이 무엇을 의미하는지에 대한 자체 아이디어를 소프트웨어에 구현합니다. 중복 인쇄로 인해 굵게 및 밑줄 속성을 사용하거나, 한 문자를 다른 문자로 완전히 바꾸거나, 문자를 결합하거나, 문자를 전혀 바꾸지 않으려는 시도가 발생할 수 있습니다.
추가 읽기
- "텍스트 파일". 기본 정의. 단일 UNIX 사양. IEEE 1003.1. 2018. 그룹을 엽니다.
- "cal"이 강조 표시를 위해 이상한 08/^H/\b 터미널 코드를 사용하는 이유는 무엇이며 어떻게 작동합니까?
- 조나단 데보인 폴라드(2017).향상된 매뉴얼 페이지
ul
. 제안.