linux積累---關(guān)于linux特殊重定向的理解
什么是Here Document
Here Document 是在Linux Shell 中的一種特殊的重定向方式,它的基本的形式如下
- cmd << delimiter
 - Here Document Content
 - delimiter
 
它的作用就是將兩個(gè) delimiter 之間的內(nèi)容(Here Document Content 部分) 傳遞給cmd 作為輸入?yún)?shù)。
比如在終端中輸入cat << EOF ,系統(tǒng)會(huì)提示繼續(xù)進(jìn)行輸入,輸入多行信息再輸入EOF,中間輸入的信息將會(huì)顯示在屏幕上。如下:
- fish@mangos:~$ cat << EOF
 - > First Line
 - > Second Line
 - > Third Line EOF
 - > EOF
 - First Line
 - Second Line
 - Third Line EOF
 
注: >這個(gè)符號(hào)是終端產(chǎn)生的提示輸入信息的標(biāo)識(shí)符
這里要注意幾點(diǎn)
- EOF 只是一個(gè)標(biāo)識(shí)而已,可以替換成任意的合法字符
 - 作為結(jié)尾的delimiter一定要頂格寫,前面不能有任何字符
 - 作為結(jié)尾的delimiter后面也不能有任何的字符(包括空格)
 - 作為起始的delimiter前后的空格會(huì)被省略掉
 - Here Document 不僅可以在終端上使用,在shell 文件中也可以使用,例如下面的here.sh 文件
 
- cat << EOF > output.sh
 - echo "hello"
 - echo "world"
 - EOF
 
使用 sh here.sh 運(yùn)行這個(gè)腳本文件,會(huì)得到output.sh 這個(gè)新文件,里面的內(nèi)容如下
- echo "hello"
 - echo "world"
 
Here Document的變形
delimiter 與變量
在Here Document 的內(nèi)容中,不僅可以包括普通的字符,還可以在里面使用變量,例如將上面的here.sh 改為
- cat << EOF > output.sh
 - echo "This is output"
 - echo $1
 - EOF
 
使用sh here.sh HereDocument 運(yùn)行腳本得到output.sh的內(nèi)容
- echo "This is output"
 - echo HereDocument
 
在這里 $1 被展開成為了腳本的參數(shù) HereDocument
但是有時(shí)候不想展開這個(gè)變量怎么辦呢,可以通過在起始的 delimiter的前后添加 " 來實(shí)現(xiàn),例如將上面的here.sh 改為
- cat << "EOF" > output.sh #注意引號(hào)
 - echo "hello"
 - echo "world"
 - EOF
 
得到的output.sh 的內(nèi)容為
- echo "This is output"
 - echo $1
 
<< 變?yōu)?<<-
Here Document 還有一個(gè)用法就是將 '<<' 變?yōu)?'<<-'。 使用 <<- 的唯一變化就是Here Document 的內(nèi)容部分每行前面的 tab (制表符)將會(huì)被刪除掉,這種用法是為了編寫Here Document的時(shí)候可以將內(nèi)容部分進(jìn)行縮進(jìn),方便閱讀代碼。















 
 
 






 
 
 
 