줄 바꿈없이 "-n"을 인쇄하는 방법은 무엇입니까?


16

명령을 -n사용하여 인쇄하려고합니다 echo. 그러나 단순히 입력 echo -n하면 개행 만 표시되고 표시되지 -n않고 개행을 발행합니다.


echo -n -- -n작동 합니까 (테스트하기 편리한 Linux 상자가 없습니까)?
n0rd

가상 머신에 Ubuntu를 설치 중이며 속도가 매우 느린 것 같습니다.
Star OS

1
확인했습니다-그렇지 않습니다. 아마도 내부 bash 명령이고 getopt명령 줄을 구문 분석하기 위해 (???)를 사용하지 않기 때문에
n0rd

1
이 질문은 pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html 에서 요청 및 답변됩니다 .- "-n을 반향 할 것으로 예상되는 응용 프로그램을 준수하려면 Ninth에서 파생 된 printf 유틸리티를 사용해야합니다. 에디션 시스템 "
Brandin

내가 만든 첫 번째 인기있는 질문. 예 이요?
Star OS

답변:


28

문제 는를 인수로 echo해석한다는 -n것입니다. 기본 bash 구현에서 (from help echo) 을 의미합니다 .

  -n  do not append a newline

그 문제를 해결하는 방법에는 여러 가지가 있습니다.

  1. 다른 캐릭터를 포함시켜 옵션이 아닌 무언가로 만드십시오. 예를 들어, echo로 개행을 인쇄하지 말고 -n백 슬래시 이스케이프를 해석 -e하고 개행을 명시 적으로 추가하도록 지시 하십시오.

    $ echo -ne '-n\n'
    -n
  2. 또는 공백 만 포함

    $ echo " -n"
     -n

    그러나 원하지 않는 공간을 추가합니다.

  3. 인쇄 할 수없는 문자를 사용하십시오. 여기. 백 스페이스를 사용하고 있습니다 ( \b)

    $ echo -e "\b-n"
    -n

    이것은 또한 당신이 원하지 않는 여분의 캐릭터를 추가합니다.

  4. 속임수 사용

    $ echo n- | rev
    -n

    rev명령은 단순히 출력을 반대로 인쇄합니다.

  5. 작업에 적합한 도구 사용

    $ printf -- '-n\n'
    -n

`\`유효한 문자가 올바른 것이 맞습니다.
Pilot6

@ Pilot6 네.하지만 그 접근법 (당신과 나의 것)의 문제는 여분의 캐릭터를 추가한다는 것입니다. 이로 인해 문제가 발생할 수 있습니다. 특히 당신이 그것을 파싱하고 같은 것을 시도하고 싶다면 grep '^-n'. pritnf정말 갈 길입니다.
terdon

글쎄, printf어쨌든 더 낫지 만 문제는 단지 관련 echo입니다.
Pilot6

2
것 같습니다 echo -e "-n\c"정확한 일을한다.
Pilot6

1
\c추가 출력을 억제 함
Pilot6


7

이 명령을 사용할 수 있지만 추가 공간이 추가됩니다.

echo -e  "\r-n"

이것은 일종의 해킹입니다.

-e 백 슬래시 명령 기호를 활성화합니다.

\r 캐리지 리턴입니다.

실제로 \유효한 문자는 문자열의 어느 곳에서나 수행됩니다.

로 유효한 것을 확인할 수 있습니다 help echo.

echo "-n"-n의 매개 변수로 사용 되기 때문에 작동하지 않습니다 echo.

PS 최고의 솔루션 IMHO는

echo -e "-n\c"

추가 문자를 추가하지 않습니다 .

echo -e "-n\n"

줄 바꿈과 동일하지만 인쇄합니다.


1
우와! 이것은 내 것보다 낫습니다. "초보자"에 대해 조금 설명해 주시겠습니까 ;-)
Sadi

감사합니다. 처음 또는 끝에서 캐리지 리턴을 추가하는 위치는 중요하지 않습니다.
Sadi

@Sadi 예, 무언가를 추가하면 유효하지 않은 옵션이되기 때문입니다. -n유효 -nfoo하며 인쇄되지 않습니다.
terdon

@terdon man echo도 있습니다. 그러나 help조금 낫습니다.
Pilot6

나는 그것이 있다는 것을 알고, 그것은 단지 관련이 없습니다. /bin/echo완전히 다른 것이고 echobash에서 실행할 때 쉘에 따라 상당히 다른 내장 기능을 얻습니다.
terdon

5

나는 당신이 확실히 사용하고 싶다면 echo, 이것은 당신을 만족시켜야 한다고 생각 합니다.

echo "-n "

반면이 때문에이 작품 -n에 대한 유효한 옵션입니다 echo, -n그렇지 후 공간. 옵션이 아니기 때문에 echo인쇄 만하면됩니다.


여기에있는 대부분의 시청자는 "-n"이 아니라 "-n"만 원할 수 있습니다.
Star OS

5

너희들은 정말로 그것을 너무나 생각하고있다.

 echo -e \\055n

또는 후행 줄 바꿈없이

 echo -en \\055n

어떻게 printf "-n\n" 지나친는?
Dmitry Grigoryev

네, 방금 이런 식으로 대답했습니다. 내 답변을 삭제합니다. 이것은 내장 에코와 함께 작동 /bin/echo하고 적어도 다음 과 같이 호출되는 경우 상대적으로 이식성이 echo -e "\055n"
뛰어납니다.

-en은 내가 원하는 것이 아닙니다.
Star OS

2

@AB의 답변을 확장하기 위해 사용할 수있는 유일한 휴대용 방법 echo은과 같은 옵션을 사용하지 않는 것 -n입니다. printf가능한 경우 대신 사용하십시오. 이 참조 페이지에서 자세한 내용을 제공하고, 잘 때와 방법을 설명 echo하고 printf사용해야합니다 :

현재 echo (1)은 플래그를 생략하고 시퀀스를 이스케이프하는 경우에만 이식 가능합니다. 일반 텍스트 이상이 필요한 경우 printf (1)를 대신 사용하십시오.


답변을 연장 할 예정입니다. 답변을 수정하십시오.
Star OS

다른 사람의 답변을 원저자보다 더 많은 텍스트를 얻을 수있는 시점으로 변경하는 것은 좋은 생각이 아닙니다.
Dmitry Grigoryev

2

Bash 스크립트에서 다음을 실행할 수 있습니다.

echo -n -
echo n

또는 interacive shell에서 :

echo -n - ; echo n

echo말이지 -문자와 n문자.


해봤 어? 그건 틀렸어.
Pilot6


첫 번째 명령 출력 -pilot6@Pilot6:~$. 두 번째 출력 n.
Pilot6

@ Pilot6 대화식 터미널에서 실행 중인지 또는 질문에 지정되지 않은 bash 스크립트에서 실행 중인지에 따라 다릅니다. OTOH 터미널에서 필요하다면 두 줄을 결합하는 것이 간단합니다 . &&이 답변이 잘못되었다고 말할 수는 없습니다 .
user12205

bash 스크립트의 경우 훨씬 명확 해 지도록 편집하겠습니다.
Star OS

1

다른 세 가지 방법 :

$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n

0

당신은 실행할 수 있습니다

printf -n;echo

Busybox Ash에서 테스트


금연 건강 증진 협회? 금연 건강 증진 협회? 포켓몬은 무엇을 의미합니까?
스타 OS

나는 '비지 박스 재'실행
jiwopene을

"Busybox"또는 "Busybox Ash"라고 말합니다. 사람들은 "애쉬 (Ash)"때문에 사람들이 그 포켓몬 특성이나 화산에서 나온 재를 생각할 수도 있습니다.
Star OS

보다 나은. alt255alt255
Star OS

@ 스타 OS ash 는 Almquist Shell의 이름입니다.
muru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.