슬래시 및 기타 특수 문자가 포함된 여러 줄 문자열을 출력하는 방법은 무엇입니까?

슬래시 및 기타 특수 문자가 포함된 여러 줄 문자열을 출력하는 방법은 무엇입니까?

bash 스크립트가 완료된 후 출력하고 싶습니다.

 /\_/\
( o.o )
 > ^ <

다음을 시도했지만 모두 오류를 반환했습니다.

echo /\\_/\\\n\( o.o \)\n > ^ <
echo  \/\\_\/\\\r\n( o.o )\r\n > ^ <
echo /\\_/\\\n\( o.o \)\n \> ^ <

bash가 해당 문자를 문자열로 렌더링하도록 이 문자를 어떻게 이스케이프합니까?

답변1

cat이 경우 여기에 (인용된) 문서를 사용하겠습니다 .

cat <<'END_CAT'
 /\_/\
( o.o )
 > ^ <
END_CAT

이는 쉘의 "방해"(변수 확장 등, 백슬래시 이스케이프 시퀀스 해석 또는 리디렉션, 파이핑 등) 없이 ASCII 아트가 예상대로 출력되도록 하는 가장 좋은 방법입니다.

여러 줄 문자열을 사용할 수도 있습니다 printf.

printf '%s\n' ' /\_/\
( o.o )
 > ^ <'

출력하려는 ​​정적 문자열 주위에 작은따옴표를 사용하는 것에 유의하세요. 우리는 ASCII 문자가 쉘에 의해 어떤 방식으로든 해석되지 않도록 작은따옴표를 사용합니다. 또한 우리가 출력하는 문자열은 다음과 같습니다.두번째인수 printf첫 번째 인수 printf는 항상 백슬래시가 비활성화되지 않는 작은따옴표 형식 문자열입니다.

또는 여러 문자열 printf(한 줄에 하나씩):

printf '%s\n' ' /\_/\' '( o.o )' ' > ^ <'
printf '%s\n' \
' /\_/\' \
'( o.o )' \
' > ^ <'

또는 echo(그러나 참조왜 printf가 echo보다 나은가요?;기본적으로 쉘과 현재 설정에 따라 ASCII 그리기를 잘 처리하지 못하는 특정 이스케이프 시퀀스에 문제가 있을 수 있습니다.

echo ' /\_/\
( o.o )
 > ^ <'

하지만 다시 한번 말하지만, 여기에서 문서화하는 것이 cat가장 편리하고 간단하다고 생각합니다.

답변2

''연산자로 처리되지 ""않도록 작은따옴표나 큰따옴표로 묶습니다 . <>()그런 다음 한 줄에 표시하려면 Bash에서 echo -e또는 를 사용하여 $' '개행을 표시 \n하고 다른 백슬래시로 백슬래시를 이스케이프하세요. 또는 오히려 printf서로 다른 환경 간의 차이 문제를 피하기 위해서입니다.echo

그래서:

$ printf ' /\\_/\\\n( o.o )\n > ^ <\n'
 /\_/\
( o.o )
 > ^ <
$ printf "%s\n" $' /\\_/\\\n( o.o )\n > ^ <'
 /\_/\
( o.o )
 > ^ <  

또한보십시오:

관련 정보