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 )
> ^ <
또한보십시오: