HOWTO · Bash

Bash 스크립트의 에코 탭 문자

이 기사는 탭과 같은 특수 문자를 에코하는 방법을 보여줍니다. 그렇지 않으면 Bash 스크립트에서 단일 공백 문자로 변환됩니다. 이는 Bash 이외의 셸(예: zsh)로 확장됩니다.

이 페이지의 내용

이 글은 Bash 스크립트를 사용할 때 하나 또는 여러 개의 탭 문자를 에코하는 방법을 설명합니다.

Bash 스크립트의 에코 탭 문자

echo 명령은 간단합니다. 터미널에 전달되는 모든 내용을 인쇄합니다. 일반적으로 변수를 다음과 같이 저장하면

example='         'testing

echo '['$example']' 명령을 사용하여 이 변수를 인쇄하려고 하면 다음과 같은 결과가 표시됩니다.

[ testing]

이것은 우리가 입력했거나 변수에 저장한 것이 아닙니다. 위의 예에서 탭 문자를 두 번 사용했지만 우리가 보는 것은 하나의 공백입니다.

이 동작은 모든 셸에서 일관되지 않습니다. 예를 들어 zsh 셸에서 동일한 스크립트를 실행하면 다음과 같은 결과가 나올 것으로 예상됩니다.

[               testing]

Bash 스크립트로 돌아가서 몇 가지 방법이 있습니다.

-e 플래그 사용

-e 플래그는 백슬래시 이스케이프 해석 활성화를 의미합니다. 위와 같은 예제를 작성했다면 다음과 같이 작성할 것입니다.

example='\t\t'testing
echo -e '['$example']'

결과는 다음과 같습니다.

[               testing]

\t 부분은 탭을 나타냅니다. 그래서 우리는 두 개의 탭을 도입하고 싶었기 때문에 \t\t로 작성했습니다.

-e 플래그가 전달되면 \t 기호는 탭으로 해석되고 필요에 따라 표시됩니다.

다음과 같이 -e 플래그를 사용하지 않으면 \t를 리터럴 문자열로 읽고 탭으로 처리하지 않습니다.

example='\t\t'testing
echo '['$example']'

결과는 다음과 같습니다.

[\t\ttesting]

플래그를 전달하는 것은 POSIX가 아니라는 점에 유의해야 합니다. 따라서 플래그가 구현되지 않은 make와 같이 이식 가능하게 사용할 수 없습니다. 따라서 거의 보편적인 printf를 포함하여 몇 가지 대안에 대해 논의할 것입니다.

물론 이 부분은 echo를 완전히 버릴 것이기 때문에 우리가 시작한 부분에서 약간 벗어납니다.

큰따옴표 사용

이것은 틀림없이 가장 간단한 솔루션이며 구문 이외의 다른 설명이 필요하지 않습니다. 다음과 같이 명령을 작성합니다.

example='       'testing
echo "[$example]"

결과는 다음과 같습니다.

[       testing]

대신 printf를 사용하십시오.

이것은 세 가지 솔루션 중 가장 휴대하기 쉽고 가장 권장되는 솔루션입니다. echo에는 많은 구현과 버전이 있지만 printf는 거의 동일합니다.

어디에서나 별도로 구현하더라도 매우 유사하게 구현됩니다. 우리는 위 방법의 변형이 zsh를 사용하여 호출할 때 동일한 결과를 초래하지만 bash를 사용하여 호출할 때 다른 결과를 낳는 것을 볼 수 있습니다.

printf를 사용하기 위한 구문은 아래에 정의되어 있습니다.

example='       'x
printf '%s\n' "[$example]"

결과는 다음과 같습니다.

[       x]

일반적인 권장 사항으로 echo는 필요한 출력이 hello와 같은 간단한 텍스트인 한 잘 작동하지만 복잡한 경우에는 echo를 사용하는 것이 까다로울 수 있습니다. 이러한 모든 경우(특수 문자 등)에는 printf를 대신 사용하는 것이 좋습니다.