etc./StackOverFlow

Bash의 반향 줄 바꿈은 리터럴을 인쇄합니다. \n

청렴결백한 만능 재주꾼 2021. 11. 10. 07:35
반응형

질문자 :Sergey


Bash에서 다음을 시도했습니다.

 echo -e "Hello,\nWorld!"

그러나 개행을 인쇄하지 않고 \n 만 인쇄합니다. 줄 바꿈을 인쇄하려면 어떻게 해야 합니까?

Ubuntu 11.04 (Natty Narwhal)를 사용하고 있습니다.



대신 printf 를 사용할 수 있습니다.

 printf "hello\nworld\n"

printf echo 보다 더 일관된 동작을 합니다. echo 의 동작은 버전마다 크게 다릅니다.


sth

Bash에 있는지 확인하십시오. 이 네 가지 방법이 모두 저에게 효과적입니다.

 echo -e "Hello\nworld" echo -e 'Hello\nworld' echo Hello$'\n'world echo Hello ; echo world

choroba

echo $'hello\nworld'

인쇄물

 hello world

$'' 문자열은 ANSI C 인용을 사용합니다.

$' string ' 형식의 단어는 특별히 처리됩니다. 이 단어는 ANSI C 표준에 지정된 대로 백슬래시 이스케이프 문자를 대체 하여 string 으로 확장됩니다.


Vanuan

echo "" 할 수 있습니다.

예를 들어,

 echo "Hello," echo "" echo "World!"

Nayeem Zen

노력하다

 echo -e "hello\nworld" hello world

그것은 나노 편집기에서 나를 위해 일했습니다.

매뉴얼 페이지에서:

-e 백슬래시 이스케이프 해석 가능


Harsha Biyani

누군가가 동료의 스크립트가 줄 바꿈을 인쇄하지 않는 이유를 알아내려고 벽에 머리를 두드리고 있는 자신을 발견한 경우 다음을 확인하십시오.

 #!/bin/bash function GET_RECORDS() { echo -e "starting\n the process"; } echo $(GET_RECORDS);

위와 같이 메서드의 실제 실행 자체는 메서드 자체에 있을 수 있는 에코를 대체하는 에코로 래핑될 수 있습니다. 분명히 나는 이것을 간결하게하기 위해 물을 줄였습니다. 알아보기가 쉽지 않았어요!

그런 다음 기능을 실행하는 더 좋은 방법은 다음과 같다고 동료들에게 알릴 수 있습니다.

 #!/bin/bash function GET_RECORDS() { echo -e "starting\n the process"; } GET_RECORDS;

Uncle Iroh

간단히 입력

 echo

새로운 라인을 얻기 위해


R Sun

이것은 Raspbian에서 저에게 효과적입니다.

 echo -e "hello\\nworld"

Sathesh

에코의 POSIX 7

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e 는 정의되지 않고 백슬래시는 구현이 정의됩니다.

첫 번째 피연산자가 -n이거나 피연산자 중 하나에 <백슬래시> 문자가 포함된 경우 결과는 구현에서 정의됩니다.

선택적인 XSI 확장이 없는 한.

따라서 잘 지정되어 있는 printf 대신 사용하는 것이 좋습니다.

형식 피연산자는 XBD 파일 형식 표기법 [...]에 설명된 형식 문자열로 사용됩니다.

파일 형식 표기법 :

\n <newline> 인쇄 위치를 다음 줄의 시작으로 이동합니다.

또한 Ubuntu 15.10 및 대부분의 배포판은 다음과 같이 echo

  • Bash 내장: help echo
  • 독립 실행형 실행 파일: which echo

혼란을 일으킬 수 있습니다.


Ciro Santilli 新疆再教育营六四事件法轮功郝海东

str='hello\nworld' $ echo | sed "i$str" hello world

alinsoar

다음을 수행할 수도 있습니다.

 echo "hello world"

이것은 스크립트 내부와 명령줄 모두에서 작동합니다.

명령줄에서 Shift + Enter 를 눌러 문자열 내부에서 줄 바꿈을 수행합니다.

이것은 내 macOS 및 Ubuntu 18.04 (Bionic Beaver) 시스템에서 작동합니다.


vinzee

CentOS에서 저에게 효과적입니다.

 echo -e ""hello\nworld""

vanishedzhou

나는 인수없이 echo를 사용합니다.

 echo "Hello" echo echo "World"

Xenon

이스케이프 시퀀스를 해석하는 새로운 매개변수 확장 이 Bash 4.4에 추가되었습니다.

${parameter@operator} - E operator

$'…' 인용 메커니즘으로 확장된 백슬래시 이스케이프 시퀀스가 있는 매개변수의 값인 문자열입니다.

 $ foo='hello\nworld' $ echo "${foo@E}" hello world

PesaThe

내 스크립트:

 echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings

산출:

 WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:

내 Bash 스크립트에서 방금 시도할 때까지 나는 당신처럼 화를 내고 있었습니다.

 echo "WARNING : $warningsFound WARNINGS FOUND: $warningStrings"

점프를 삽입할 위치에 Enter 키를 누르기만 하면 됩니다. 이제 출력은 다음과 같습니다.

 WARNING : 2 WARNINGS FOUND: Warning, found the following local orphaned signature file:

TanisDLJ

이것은 다음과 같이 더 잘 할 수 있습니다.

 x="\n" echo -ne $x

-e 옵션은 이스케이프 시퀀스에 대한 백슬래시를 해석합니다.
-n 옵션은 출력에서 후행 줄 바꿈을 제거합니다.

추신: echo 명령은 출력에 항상 후행 줄 바꿈을 포함하는 효과가 있으므로 해당 항목을 끄려면 (그리고 덜 혼란스럽게 만들기 위해) -n이 필요합니다.


Dhwanit

스크립트를 작성 중이고 다른 메시지의 일부로 줄 바꿈을 여러 번 에코할 경우 플랫폼 간 좋은 솔루션은 다음과 같이 변수에 리터럴 줄 바꿈을 넣는 것입니다.

 newline=' ' echo "first line$newlinesecond line" echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined

skiggety

이러한 솔루션 중 어느 것과도 작동하지 않고 해당 함수에서 반환 값을 가져와야 하는 사용자를 위한 항목이 하나 더 있습니다.

 function foo() { local v="Dimi"; local s=""; ..... s+="Some message here $v $1\n" ..... echo $s } r=$(foo "my message"); echo -e $r;

이 트릭만 이 Bash 버전으로 작업하고 있던 Linux 시스템에서 작동했습니다.

 GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)

DNT

중괄호와 함께 echo를 사용할 수도 있습니다.

 $ (echo hello; echo world) hello world

Avinash Raj

이것은 귀하의 경우에 적용되지 않을 수 있지만 과거에 저를 혼란스럽게 만들었습니다.

잘못된

"hello\nworld" 를 작성하면 줄 바꿈 문자가 포함된 문자열이 제공되고 echo -e 는 정확한 문자열을 인쇄합니다.

오른쪽

$'hello\nworld' 쓰기 또는

 "hello world"

줄 바꿈 문자가 포함된 문자열을 제공하고 일반 echo 는 정확한 문자열을 인쇄합니다. 당신이 본 것처럼 echo -e 가 항상 지원되는 것은 아닙니다.


JW.

때로는 공백으로 구분된 여러 문자열을 전달할 수 있으며 \n 으로 해석됩니다.

예를 들어 여러 줄 알림에 셸 스크립트를 사용하는 경우:

 #!/bin/bash notify-send 'notification success' 'another line' 'time now '`date +"%s"`

Hunter Frazier

이것이 나를 거기에 데려다 주었다....

 outstuff=RESOURCE_GROUP=[$RESOURCE_GROUP]\\nAKS_CLUSTER_NAME=[$AKS_CLUSTER_NAME]\\nREGION_NAME=[$REGION_NAME]\\nVERSION=[$VERSION]\\nSUBNET-ID=[$SUBNET_ID] printf $outstuff

수익률:

 RESOURCE_GROUP=[akswork-rg] AKS_CLUSTER_NAME=[aksworkshop-804] REGION_NAME=[eastus] VERSION=[1.16.7] SUBNET-ID=[/subscriptions/{subidhere}/resourceGroups/makeakswork-rg/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet]

Joe Healy

추가 솔루션:

경우에 따라 긴 내용(예: 코드/구성)을 여러 줄로 표시해야 합니다.

예를 들어:

  • 코드/구성을 생성하는 Bash 스크립트

echo -e , printf 몇 가지 제한 사항이 있을 수 있습니다.

일부 특수 문자를 줄 바꿈으로 자리 표시자로 사용할 수 있으며(예: ~ tr 사용하여 파일을 생성한 후 이를 대체할 수 있습니다.

 echo ${content} | tr '~' '\n' > $targetFile

IMO는 괜찮을 다른 프로그램( tr


ZenithS

출처 : http:www.stackoverflow.com/questions/8467424/echo-newline-in-bash-prints-literal-n

반응형