마지막 세 문자를 제거할 수 있다는 것을 알고 있습니다.
echo -ne '\b\b\b'
하지만 전체 행을 삭제하는 방법은 무엇입니까? 내 말은 다음을 사용하고 싶지 않다는 뜻입니다.
echo -ne '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'
...잠깐...긴 줄을 제거하세요.
답변1
당신이 찾고있는터미널 탈출. 특히 커서 위치부터 줄 시작 부분까지 내용을 지우려면 다음을 수행하세요.
echo -e "\033[1K"
또는 커서 위치에 관계없이 줄의 모든 내용:
echo -e "\033[2K"
터미널 이스케이프를 사용하여 다양한 기타 깔끔한 작업을 수행할 수도 있습니다.
답변2
사용하거나 이동할 수 \b
있습니다 \r
.커서반환한 다음 인쇄된 문자를 새 문자로 덮어씁니다.
인쇄 된 문자는 제거 \b
되거나 삭제되지 않습니다. \r
커서를 뒤로 이동시키는 것뿐입니다. \b
커서를 한 문자 뒤로 이동하고 \r
줄의 시작 부분으로 이동합니다.
예:
echo -e 'fooooo\b\b\b\bbar
인쇄할 것이다
fobaro
하지만
echo -e 'fooooo\rbar'
다음을 인쇄합니다:
barooo
이전 문자를 "제거"하려면 다음 해결 방법을 사용할 수 있습니다.
echo -e 'fooooo\r \rbar'
또는
echo -e 'fooooo\rbar '
(열 뒤의 공백에 유의하세요)
산출:
bar
이제 섹션 뒤에 공백이 있습니다.
강조 표시된 공백 출력
bar
^^^ spaces
대부분의 사용 사례에서는 이는 중요하지 않습니다. 그러나 예를 들어 배경색을 수정하면 공백이 나타납니다.
발췌 man echo
:
If -e is in effect, the following sequences are recognized:
\0NNN the character whose ASCII code is NNN (octal)
\\ backslash
\a alert (BEL)
\b backspace
\c produce no further output
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
NOTE: your shell may have its own version of echo, which usually super‐
sedes the version described here. Please refer to your shell's docu‐
mentation for details about the options it supports.
답변3
줄을 지우고 싶다면 사람들이 언급한 캐리지 리턴과 용어 정보 조합을 사용하는 것이 좋습니다.
# terminfo clr_eol
ceol=$(tput el)
echo -ne "xyzzyxyzzy\r${ceol}foobar"
이렇게 하면 를 쓴 xyzzyxyzzy
다음 줄의 시작 부분으로 돌아가서 "줄 끝까지 지우기" 시퀀스를 터미널에 보낸 다음 를 씁니다 foobar
. -n
뒤에 개행 문자를 추가하지 않고 에코를 비활성화합니다 foobar
.
답변4
당신은 분명한 요청을 했지만 echo
이 요청으로 인해 당신은 무기력해졌습니다. printf
bash 내장 및 중괄호 확장을 사용하여 이를 수행하는 방법은 다음과 같습니다 .
printf 'fooooooooo' # 10 characters
printf '\r'; printf ' %0.s' {0..9} # 10 expansions of the space character