Bash에서 공백이 여러 개 있는 문자열을 "손대지 않는" 방법은 무엇입니까? [복사]

Bash에서 공백이 여러 개 있는 문자열을 "손대지 않는" 방법은 무엇입니까? [복사]

다음과 같이 변수를 할당했습니다.

MYCUSTOMTAB='     '

하지만 에코에서 사용하면:

echo $MYCUSTOMTAB"blah blah"

또는

echo -e $MYCUSTOMTAB"blah blah"

그냥 반환단일 공간나머지 문자열은 다음과 같습니다.

 blah blah

수정하지 않고 전체 문자열을 인쇄하는 방법은 무엇입니까? \t내 취향에 비해 너무 넓어서 사용자 정의 들여쓰기에 사용하고 싶습니다 .

답변1

이를 방지하려면 변수를 큰따옴표로 묶어야 합니다.필드 분할, 어느먹다당신의 공간:

$ MYCUSTOMTAB='     '
$ echo "${MYCUSTOMTAB}blah blah"
     blah blah

답변2

제안대로이 답변변수를 인용하는 것으로 충분합니다.

귀하의 경우에 인용문이 필요한 이유는 인용문이 없으면 bash가 Split+glob 연산자를 인용문에 적용하기 때문입니다 $MYCUSTOMTAB. 기본값 $IFS에는 TAB 문자가 포함되어 있으므로 echo -e $MYCUSTOMTAB"blah blah"무엇 $MYCUSTOMTAB이든 분할되어 동일하게 됩니다. 당신이 쓴 내용은 동일합니다:

echo -e "blah blah"

(그런데, 당신은 아마도 여기서 그것을 원하지 않을 것입니다 -e).

printf대신 사용할 수도 있습니다 echo.

printf '%s\n' "$MYCUSTOMTAB"

printf '%s\n' "${MYCUSTOMTAB}blah blah"

printf또는 동일한 유형의 \n확장을 수행하려면 다음 \t을 대신 echo -e사용하십시오 .%b%s

printf '%b\n' "${MYCUSTOMTAB}blah blah"

참고용으로 읽으세요왜 printf가 echo보다 나은가요?

답변3

변수에 큰따옴표를 사용해야 한다고 생각합니다.

echo -e "$MYCUSTOMTAB"."blah blah"

답변4

귀하의 질문에 태그가 붙어 있다는 것을 알고 있지만 bash어쨌든 최대의 이식성과 신뢰성을 위해 다음을 사용하겠습니다.

printf "%sblah blah\n" "$MYCUSTOMTAB" 

또는

someString="blah blah"
printf "%s%s\n" "$MYCUSTOMTAB" "$someString"

관련 정보