공백이 에코로 축소됩니다 >>


10

파일의 내용을 읽고 내용을 조작하고 다른 파일 (특히 가상 호스트 파일)에 추가하는 스크립트를 만들고 있습니다. 출력 파일의 서식과 공백은 중요하지만 내용을 쓸 때 공백이 제거됩니다.

VHOST_PATH="/etc/apache2/extra/httpd-vhosts.conf"
TEMPLATE_PATH="./template.conf"
TEMPLATE=$(<TEMPLATE_PATH)
# manipulating $TEMPLATE
echo $TEMPLATE                   #outputs correct whitespace
echo $TEMPLATE >> $VHOST_PATH    #does not output correct whitespace

첫 번째 반향은

<VirtualHost *:80>
    ServerAdmin webmaster@domain
    DocumentRoot "root/web"
    ServerName domain
    ErrorLog "root/logs/error_log"
</VirtualHost>

그러나 파일에 들어가는 문자열은

<VirtualHost *:80> ServerAdmin webmaster@domain DocumentRoot "root/web" ServerName domain ErrorLog "root/logs/error_log" </VirtualHost>

대상 파일에 추가하는 동안 공백을 유지하려면 어떻게합니까? 나는 이것을 찾았지만 모든 유사한 질문은 스크립트를 다시 작성하지 않고 스크립트에 적용되지 않습니다.

답변:


9

다른 모든 프로그램과 마찬가지로 echo는 공백으로 구분 된 문자열을 다른 인수로 해석합니다.

전화 후

echo foo    bar

쉘에 의해 에코에 전달되는 유일한 데이터는 첫 번째 인수는 foo이고 두 번째는 bar입니다.

공백을 포함하는 전체 문자열을 단일 인수로 전달하려면 큰 따옴표로 묶으십시오.

echo "foo    bar"

네 공백을 모두 인쇄합니다.


참고 사항 : 나는 그것이 효과가 있다는 echo $TEMPLATE것이 놀랍 습니다. 여러 공백도 축소해야합니다.
Dennis

예! 그거였다. 완전한 의미는 있지만 이것이 사실임을 몰랐습니다. 또한 echo $TEMPLATE주위에 따옴표가 있었기 때문에 효과가 있었지만 게시물에 복사하는 것을 무시했습니다. 내가 틀렸어!
Jeff

1
@Jeff

1
@Jeff, 도움을 구할 때 다시 입력하는 대신 잘라서 붙여 넣는 것이 매우 중요합니다.
glenn jackman

@ glennjackman 나는 스크립트가 너무 짧아서 내가 터미널에서 일하고 있기 때문에 복사 + 붙여 넣기가 고통 스럽기 때문에 다시 타이핑 할 수 있다고 생각했습니다. 내가 틀렸어. 교훈을 얻었습니다. 팁 고마워.
Jeff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.