Nice programing

명령 출력을 bash의 변수에 저장할 때 줄 바꿈을 유지하는 방법은 무엇입니까?

nicepro 2021. 1. 10. 19:54
반응형

명령 출력을 bash의 변수에 저장할 때 줄 바꿈을 유지하는 방법은 무엇입니까?


Linux에서 bash 셸을 사용하고 있습니다. 이 간단한 스크립트가 있습니다.

#!/bin/bash

TEMP=`sed -n '/'"Starting deployment of"'/,/'"Failed to start context"'/p' "/usr/java/jboss/standalone/log/server.log" | tac | awk '/'"Starting deployment of"'/ {print;exit} 1' | tac`
echo $TEMP

하지만이 스크립트를 실행하면

./temp.sh

모든 출력은 캐리지 리턴 / 새 줄없이 인쇄됩니다. 출력을 $ TEMP에 저장하는 방식인지 에코 명령 자체인지 확실하지 않습니다.

명령의 출력을 변수에 저장하고 줄 바꿈 / 캐리지 리턴을 유지하려면 어떻게해야합니까?


변수를 인용 하십시오. 그 이유는 다음과 같습니다.

$ f="fafafda
> adffd
> adfadf
> adfafd
> afd"

$ echo $f
fafafda adffd adfadf adfafd afd

$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd

따옴표가 없으면 쉘은 $TEMP포함 된 문자로 대체 됩니다 (그 중 하나는 개행 문자 임). 그런 다음 echo을 호출하기 전에 Internal Field Separator(IFS)를 사용하여 해당 문자열을 여러 인수로 분할 하고 결과 인수 목록을 echo. 기본적으로는 IFS공백 (공백, 탭 및 줄 바꿈)으로 설정되어 있으므로 셸은 $TEMP문자열을 인수로 자르고 줄 바꿈을 볼 수 없습니다. 셸은 공백처럼 구분자로 간주하기 때문입니다.


같은 문제가 발생했습니다. 견적이 도움이 될 것입니다.

ubuntu@host:~/apps$ apps="abc
> def"
ubuntu@host:~/apps$ echo $apps
abc def
ubuntu@host:~/apps$ echo "$apps"
abc
def

참조 URL : https://stackoverflow.com/questions/22101778/how-to-preserve-line-breaks-when-storing-a-command-output-to-a-variable-in-bash

반응형