1.


here document


here document는 특정 command의 표준 입력으로 redirect 되어지는 text block을 의미 하며, 주로 쉘 스크립트에서


사용한다.



here document의 문법


command << string

command의 표준 입력으로 사용될 내용

string


이런식으로 사용하며, 이는 커맨드라인 상에서 command < somefile 을 입력하는 것과 동일하다.


(somefile에 command의 표준 입력으로 사용될 내용이 작성되어 있었다고 가정)


hello document의 command 자리에는 표준 입력을 받을 커맨드의 이름을 적고, string 자리에는 자신이 사용할 이


름을 변수 적듯 적으면 된다. (bash 예약어는 제외)


ex) script1





#!/bin/bash


cat << myTest

user name : huammmm1

hello world

myTest



쉘 스크립트 실행 결과는 아래와 같다.





2.


또한 hello document 안에는 parameter expansion, command substitution, arithmetic expansion 기능을 사용하는


것이 가능하다.


ex) script2





#!/bin/bash


USER="huammmm1"


cat << myTest

(parameter expansion) user name : $USER

(command substitution) pwd's output : $(pwd)

(arithmetic expansion) 1+2 result : $((1+2))

myTest


쉘 스크립트 실행 결과는 아래와 같다.






이 기능을 사용하지 않으려면 cat << myTest 부분을 cat << "myTest" 로 바꿔주면 된다. 결과는 아래와 같다.






3.


here document 작성 시 readability를 위해서 들여쓰기를 하는 것도 가능한데, "<<" 부분을 "<<-" 으로 바꾸어 주면


된다. 먼저 아래의 쉘 스크립트를 보자.


ex) script3





이 경우 쉘 스크립트를 실행하면 아래와 같이 탭이 그대로 출력 된다.






하지만 아래 그림과 같이 "<<" 부분을 "<<-"으로 바꿔주게 되면





#!/bin/bash


cat <<- myTest

user name : huammmm1

hello world

myTest


이 경우 bash는 here document 안의 탭을 무시하며, 이 때 탭은 오로지 쉘 스크립트 상의 readability를 위해서 사


용된다. 결과는 아래와 같다.






4.


here strings


here document가 다수의 텍스트를 특정 command의 표준 입력으로 넣을 때 사용된다면 here strings의 경우 짧은 


길이의 스트링을 특정 command의 표준 입력으로 넣을 때 사용되며, 문법은 다음과 같다.


command <<< text


ex) 





cat <<< "hello world"


text에 space가 포함되어 있을 경우 double quote로 감싸주자.







Posted by huammmm1
,