Bash에서 다음을 시도했습니다.
echo -e "Hello,\nWorld!"
그러나 개행을 인쇄하지 않고 \n
만 인쇄합니다. 줄 바꿈을 인쇄하려면 어떻게 해야 합니까?
Ubuntu 11.04 (Natty Narwhal)를 사용하고 있습니다.
질문자 :Sergey
Bash에서 다음을 시도했습니다.
echo -e "Hello,\nWorld!"
그러나 개행을 인쇄하지 않고 \n
만 인쇄합니다. 줄 바꿈을 인쇄하려면 어떻게 해야 합니까?
Ubuntu 11.04 (Natty Narwhal)를 사용하고 있습니다.
대신 printf
를 사용할 수 있습니다.
printf "hello\nworld\n"
printf
echo
보다 더 일관된 동작을 합니다. echo
의 동작은 버전마다 크게 다릅니다.
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 표준에 지정된 대로 백슬래시 이스케이프 문자를 대체 하여 string 으로 확장됩니다.
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
새로운 라인을 얻기 위해
이것은 Raspbian에서 저에게 효과적입니다.
echo -e "hello\\nworld"
에코의 POSIX 7
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
는 정의되지 않고 백슬래시는 구현이 정의됩니다.
첫 번째 피연산자가 -n이거나 피연산자 중 하나에 <백슬래시> 문자가 포함된 경우 결과는 구현에서 정의됩니다.
선택적인 XSI 확장이 없는 한.
따라서 잘 지정되어 있는 printf
대신 사용하는 것이 좋습니다.
형식 피연산자는 XBD 파일 형식 표기법 [...]에 설명된 형식 문자열로 사용됩니다.
\n <newline> 인쇄 위치를 다음 줄의 시작으로 이동합니다.
또한 Ubuntu 15.10 및 대부분의 배포판은 다음과 같이 echo
help echo
which echo
혼란을 일으킬 수 있습니다.
str='hello\nworld' $ echo | sed "i$str" hello world
다음을 수행할 수도 있습니다.
echo "hello world"
이것은 스크립트 내부와 명령줄 모두에서 작동합니다.
명령줄에서 Shift + Enter 를 눌러 문자열 내부에서 줄 바꿈을 수행합니다.
이것은 내 macOS 및 Ubuntu 18.04 (Bionic Beaver) 시스템에서 작동합니다.
CentOS에서 저에게 효과적입니다.
echo -e ""hello\nworld""
나는 인수없이 echo를 사용합니다.
echo "Hello" echo echo "World"
이스케이프 시퀀스를 해석하는 새로운 매개변수 확장 이 Bash 4.4에 추가되었습니다.
${parameter@operator} - E operator
$'…'
인용 메커니즘으로 확장된 백슬래시 이스케이프 시퀀스가 있는 매개변수의 값인 문자열입니다.
$ foo='hello\nworld' $ echo "${foo@E}" hello world
내 스크립트:
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:
이것은 다음과 같이 더 잘 할 수 있습니다.
x="\n" echo -ne $x
-e 옵션은 이스케이프 시퀀스에 대한 백슬래시를 해석합니다.
-n 옵션은 출력에서 후행 줄 바꿈을 제거합니다.
추신: echo 명령은 출력에 항상 후행 줄 바꿈을 포함하는 효과가 있으므로 해당 항목을 끄려면 (그리고 덜 혼란스럽게 만들기 위해) -n이 필요합니다.
스크립트를 작성 중이고 다른 메시지의 일부로 줄 바꿈을 여러 번 에코할 경우 플랫폼 간 좋은 솔루션은 다음과 같이 변수에 리터럴 줄 바꿈을 넣는 것입니다.
newline=' ' echo "first line$newlinesecond 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를 사용할 수도 있습니다.
$ (echo hello; echo world) hello world
이것은 귀하의 경우에 적용되지 않을 수 있지만 과거에 저를 혼란스럽게 만들었습니다.
"hello\nworld"
를 작성하면 줄 바꿈 문자가 포함된 문자열이 제공되고 echo -e
는 정확한 문자열을 인쇄합니다.
$'hello\nworld'
쓰기 또는
"hello world"
줄 바꿈 문자가 포함된 문자열을 제공하고 일반 echo
는 정확한 문자열을 인쇄합니다. 당신이 본 것처럼 echo -e
가 항상 지원되는 것은 아닙니다.
때로는 공백으로 구분된 여러 문자열을 전달할 수 있으며 \n
으로 해석됩니다.
예를 들어 여러 줄 알림에 셸 스크립트를 사용하는 경우:
#!/bin/bash notify-send 'notification success' 'another line' 'time now '`date +"%s"`
이것이 나를 거기에 데려다 주었다....
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]
추가 솔루션:
경우에 따라 긴 내용(예: 코드/구성)을 여러 줄로 표시해야 합니다.
예를 들어:
echo -e
, printf
몇 가지 제한 사항이 있을 수 있습니다.
일부 특수 문자를 줄 바꿈으로 자리 표시자로 사용할 수 있으며(예: ~
tr
사용하여 파일을 생성한 후 이를 대체할 수 있습니다.
echo ${content} | tr '~' '\n' > $targetFile
IMO는 괜찮을 다른 프로그램( tr
출처 : http:www.stackoverflow.com/questions/8467424/echo-newline-in-bash-prints-literal-n
인스턴스 상태 저장을 사용하여 활동 상태를 저장하려면 어떻게 해야 합니까? (0) | 2021.11.10 |
---|---|
#include의 차이점은 무엇입니까?<filename> 및 #include "파일 이름"? (0) | 2021.11.10 |
jQuery를 통해 어떤 라디오 버튼이 선택되었는지 어떻게 알 수 있습니까? (0) | 2021.11.10 |
JavaScript에서 null, 정의되지 않음 또는 공백 변수를 확인하는 표준 함수가 있습니까? (0) | 2021.11.10 |
JavaScript에서 현재 날짜를 어떻게 얻습니까? (0) | 2021.11.10 |