\t로 시작하는 새 줄과 문자열을 에코합니다.

\t로 시작하는 새 줄과 문자열을 에코합니다.

물론 echo -e를 사용하면 \n이 새 줄로 인식되도록 할 수 있습니다. 문제는 "\test"처럼 \t로 시작하는 것을 에코하려고 할 때입니다.

내가 공연하고 싶다고 가정 해 봅시다 echo -e "test\n\\test". 나는 출력을 기대합니다 :

test
\test

그러나 대신 출력은 다음과 같습니다.

test
  est

\\t리터럴 \t가 아닌 탭 문자로 해석됩니다 . 이 문제에 대한 깨끗한 해결책이 있습니까?

답변1

echo -e "\\t"

백슬래시는 큰따옴표 안에서 특별하기 때문에 전달 \t됩니다 . 그것은 다음과 같이 작용한다echobash도망가다(참조) 연산자. 에서는 \\자체적으로 탈출합니다.

다음을 수행할 수 있습니다.

echo -e "\\\\t"

for echo가 전달되거나 \\t( 그것도 작동함) 특별하지 않은 echo -e "\\\t"작은따옴표를 사용할 수 있습니다 .\

echo -e '\t'

지금,echo이식성이 매우 낮은 명령입니다. 에서도 bash환경에 따라 동작이 달라질 수 있습니다. 나는 그것을 피하고 대신 사용하는 것이 좋습니다 printf. 다음과 같이 할 수 있습니다.

printf 'test\n\\test\n'

또는 어떤 부분이 이러한 이스케이프 시퀀스 확장을 거치는지 결정할 수도 있습니다.

printf 'test\n%s\n' '\test'

또는:

printf '%b%s\n' 'test\n' '\test'

%becho(some s) 와 동일한 이스케이프 시퀀스를 이해하는 echo반면, 첫 번째 인수 printf(형식)도 시퀀스를 이해하지만 echo약간 다른 방식으로 이해합니다(다른 언어에서 수행되는 방식과 더 비슷함). 어찌됐든 \n양측은 이해한다.

답변2

이것은 명령 매뉴얼을 따르지 않지만 man 자체는 요점 1을 지적합니다.

  1. 에코는 쉘에 따라 다릅니다(때때로 파이프 등을 피해야 하는 다른 이유가 있음).
  2. Stéphane의 의견은 좋은 선택입니다 printf.
  3. echo해결 방법 echo -e "a\na\ta"(큰따옴표, 더 많은 정보를 얻기 위해 이 코드를 확장하려면 해당 내용을 읽어보세요) 및 테스트:

`

➜  ~ echo -e a \n a \ta
a n a ta
➜  ~ echo -e "a \n a \ta"
a 
 a  a
➜  ~ echo -e "a\na\ta"   
a
a   a
➜  ~ bash                
T420s:~$ echo -e "a\na\ta"
a
a   a
T420s:~$ echo -e a\na\ta
anata
T420s:~$ echo a\na\ta
anata
T420s:~$ echo "a\na\ta"
a\na\ta
T420s:~$ 

첫 번째 쉘은 ZSH입니다.

답변3

큰따옴표 안의 백슬래시로 인해 다음 문자가 문자 그대로 해석되고(다음 문자가 해당 문자 중 하나인 경우) 셸 조각이 "test\n\\test"문자열로 확장됩니다 . 그렇지 않으면 백슬래시 자체가 문자 그대로 해석됩니다. 그런 다음 줄 바꿈과 탭 으로 바꾸십시오 .test\n\test"$\`echo -e\n\t

리터럴 텍스트를 인용하기 위해 큰따옴표를 사용하지 마십시오. 대신 작은따옴표를 사용하세요. 규칙은 더 간단합니다. 작은따옴표 안의 모든 내용은 문자 그대로 작은따옴표로 해석됩니다. 큰따옴표를 사용하기로 선택한 경우 뒤에 인용할 문자가 없는 백슬래시를 사용하지 마십시오. 큰따옴표 안에 백슬래시를 사용하려면 백슬래시를 사용하십시오 \\.

echo -e 'test\n\\test'
echo -e "test\\n\\\\test"

관련 정보