안녕하세요. 이번 시간에는 리눅스 echo 명령어에 대해 간단하게 알아봅시다.

 


 echo는 보통 텍스트를 출력할 때 많이 써먹습니다. man 페이지에서 확인해 봐도, text를 출력한다. 정도만 설명되어 있어요. 예를 들어 보겠습니다.

 

 

 echo gh를 입력해 보면 gh가 출력됩니다. 출력할 문자열이 gh이기 때문입니다. 다음에 echo gh is my best friend를 치면 어떻게 될까요? gh is my best friend가 그대로 나옵니다. 여기까지는 별로 어렵지 않아요. 단지, 문자열을 standard output으로 그대로 출력해 버리기 때문입니다.

 

 환경 변수를 출력하는 데에도 유용하게 쓸 수 있습니다. echo $JAVA_HOME은 뭘 의미하나요? 변수 JAVA_HOME을 출력합니다. 자바를 설치하게 되면 한 번 쯤은 써 볼 명령어일 겁니다. 보니까, /usr/lib/jvm/java-8-openjdk-amd64로 되어 있는데요. env 명령어를 치시면, 환경 변수 목록들이 좌르륵 나옵니다.

 

 

 이 중에 JAVA_HOME 패턴이 들어간 것만 출력하려면 env 결과에 grep JAVA_HOME을 piping 하면 됩니다.

 


 그런데, new line을 출력해야 하는 경우가 있어요. 이럴 땐 어떻게 해야 할까요?

 

 postgres 유저는 bash 쉘을 이용합니다. echo "cho\nga\nhui"를 입력해 봅시다. 제가 의도한 결과는 cho, ga, hui 순서대로 3개의 줄에 걸쳐서 출력되는 것이였습니다만, new line을 인식하지 못합니다. 개행 문자를 인식하게 하려면 어떻게 해야 할까요?

 

 

 -e 옵션을 주시면 됩니다. backslash escapes라고 되어 있는데요. man 페이지를 계속 보시면, -e를 켜 놓았을 때, 어떤 문자를 추가로 인식하게 되는지 알 수 있습니다.

 

 

 new line이 있습니다. 개행 문자를 인식하게 하려면 -e 옵션을 주면 되겠군요.

 

 

 echo -e "cho\nga\nhui"를 입력해 보시면, 아까와는 다르게 cho, ga, hui. 이렇게 3줄에 걸쳐서 출력됩니다.

 

 

 " 문자는 어떻게 출력하면 좋을까요? double quotes로 알려져 있는데요. echo -e I had read "C programming" 이렇게 입력하면, "는 출력되지 않습니다. 이는 "가 특수한 역할을 하는 문자이기 때문입니다. "를 double quote 자체로 인식하게 하려면 어떻게 해야 할까요? \ 문자로 "를 escaping 시키면 됩니다.

 

 

 \"은 문자 "를 의미합니다. "를 escaping 처리를 했으니, 위와 같이 입력하면 C programming의 앞과 뒤에 " 문자가 붙어서 나오게 됩니다. 이 escaping은 정규 표현식을 사용할 때에도 매우 많이 이용이 되니, 알아두시면 좋을 듯 싶습니다.