programing

Echo newline in Bash prints 리터럴 \n

javamemo 2023. 4. 10. 20:48
반응형

Echo newline in Bash prints 리터럴 \n

새 라인을 인쇄하려면 어떻게 해야 합니까?이것은 인쇄만 할 뿐이다.\n:

$ echo -e "Hello,\nWorld!"
Hello,\nWorld!

사용하다printf대신:

printf "hello\nworld\n"

printf다양한 환경에서 보다 일관성 있게 동작합니다.echo.

Bash에 있는지 확인합니다.

$ echo $0
bash

이 네 가지 방법은 모두 나에게 효과가 있습니다.

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

인쇄하다

hello
world

$''문자열은 ANSI C 따옴표를 사용합니다.

형식의 단어$'string'특별한 취급을 받습니다.ANSI C 표준에서 지정한 대로 백슬래시 이스케이프 문자를 사용하여 단어가 문자열로 확장됩니다.

넌 언제나 할 수 있어echo "".

예를들면,

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

동료의 스크립트가 새로운 라인을 인쇄하지 않는 이유를 알아내려고 애쓰는 사람이 있을 때, 이 점에 주의해 주십시오.

#!/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;

간단히 입력

echo

라인을 바꾸다

에코에서의 POSIX 7

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

-e는 정의되어 있지 않으며 백슬래시는 구현 정의되어 있습니다.

첫 번째 오퍼랜드가 -n인 경우 또는 오퍼랜드 중 하나가 <backslash> 문자를 포함하는 경우 결과는 구현 정의됩니다.

옵션인 XSI 확장이 없는 한.

따라서 적절한 사양의 를 사용하는 것을 추천합니다.

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

파일 형식 표기법:

\n < newline > 인쇄 위치를 다음 행의 선두로 이동합니다.

또한 Ubuntu 15.10 및 대부분의 Distros는 구현되어 있습니다.echo둘 다:

  • Bash 내장:help echo
  • 스탠드아론 실행 파일:which echo

혼란을 야기할 수 있습니다.

질문(특수문자 등은 제외)에 대해서만 큰따옴표만 작은따옴표로 변경합니다.

echo -e 'Hello,\nWorld!'

결과:

Hello,
World!
str='hello\nworld'
$ echo | sed "i$str"
hello
world

다음 작업도 가능합니다.

echo "hello
world"

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

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

MacOS와 Ubuntu 18.04(바이오닉 비버) 시스템에서 사용할 수 있습니다.

Bash 4.4에는 이스케이프 시퀀스를 해석하는 새로운 파라미터 확장이 추가되었습니다.

${parameter@operator} - E operator

은 expansion과 입니다.$'…'견적 메커니즘

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

인수 없이 에코만 사용합니다.

echo "Hello"
echo
echo "World"

에코를 포함한 새로운 행을 인쇄하려면 , 다음의 순서를 사용합니다.

echo

또는

echo -e '\n'

이것은 로서 할 수 있는 것이 좋다.

x="\n"
echo -ne $x

합니다.
을 지정하면 의 됩니다.

PS: 명령어 echo는 항상 출력에 후행의 새로운 행을 포함하기 때문에 -n은 그것을 끄는데 필요합니다(그리고 그것을 혼란스럽게 하지 않습니다).

내 스크립트:

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"

그 점프를 삽입하고 싶은 곳을 치세요.현재 출력은 다음과 같습니다.

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

스크립트를 작성할 때 다른 메시지의 일부로 여러 번 줄바꿈을 반복할 경우 다음과 같은 변수에 문자 그대로 줄바꿈을 넣는 것이 좋습니다.

newline='
'

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

이전 답변이 작동하지 않고 함수에서 반환값을 얻을 필요가 있는 경우:

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)

교정기에도 에코를 사용할 수 있습니다.

$ (echo hello; echo world)
hello
world

이게 날 그곳에 데려다 줬어...

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]

하여 여러 할 수 , 이은 공백으로 구분하여 할 수 .\n.

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

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

jq의 경우:

$ jq -nr '"Hello,\nWorld"'
Hello,
World

기타 솔루션:

긴 콘텐츠(코드/설정 등)를 여러 줄 에코해야 하는 경우

예를 들어 다음과 같습니다.

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

echo -e,printf가 있을 수

바꿈으로 할 수 예: " " " " " " " " " " " " " " " " " " " " " " " " " " 등).~한 후 tr:

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

.tr는 문제 、 IMO 、 IMO 。

언급URL : https://stackoverflow.com/questions/8467424/echo-newline-in-bash-prints-literal-n

반응형