shell中的Here Document
目錄
1、什么是Here Document
注意事項(xiàng)
2、cat + << here結(jié)合創(chuàng)建文件
3、Here Document的變形
(3.1)HERE中的變量
(3.2)<<?變?yōu)?<<-
4、參考鏈接
1、什么是Here Document
Here Document 是在Linux Shell 中的一種特殊的重定向方式,它的基本的形式如下
cmd << HEREDocument Content #一段信息HERE它的作用就是將兩個(gè)?HERE之間的內(nèi)容(Here Document Content?部分) 傳遞給cmd 作為輸入?yún)?shù)。其中HERE相當(dāng)于標(biāo)記,可以是任何的字符串。
比如在終端中輸入cat << EOF?,系統(tǒng)會(huì)提示繼續(xù)進(jìn)行輸入,輸入多行信息再輸入EOF后,兩個(gè)EOF之間輸入的信息將輸出到標(biāo)準(zhǔn)輸出,這里是終端。如下:
$ cat << HERE> First Line> Second Line> Third Line > HEREFirst LineSecond LineThird Line注:?>這個(gè)符號(hào)是終端產(chǎn)生的提示輸入信息的標(biāo)識(shí)符
注意事項(xiàng)
2、cat + << here結(jié)合創(chuàng)建文件
Here Document 與cat命令結(jié)合,可用于創(chuàng)建一個(gè)新的文件,這個(gè)是cat命令非常常用的用法。
使用格式:
cat << HERE > filenameDocument Content #一段信息HERE作用:HERE之間輸入的信息將不回輸出到標(biāo)準(zhǔn)輸出,而是重定位到filename文件中,如果filename文件不存在,則會(huì)先創(chuàng)建此文件,再輸入內(nèi)容。
同時(shí),上述命令可以在終端上直接使用,也可以在shell 腳本中使用,例如下面的here.sh 文件
cat << HERE > output.shecho "hello"echo "world"HERE使用 sh here.sh?命令運(yùn)行這個(gè)腳本文件,會(huì)得到output.sh 這個(gè)新文件,里面的內(nèi)容如下:
echo "hello"echo "world"注意:“cat << HERE > filename” 中的 > 符號(hào),表示的是覆蓋式的寫(xiě)入,會(huì)將文件之中內(nèi)容先刪除再寫(xiě)入;如果想要追加式的寫(xiě)入,需要換成 >> 符號(hào),格式:“cat << HERE >> filename”? 。
關(guān)于cat 與Here Document的結(jié)合使用,可以參考博客:《linux下cat命令詳解》
3、Here Document的變形
(3.1)HERE中的變量
在Here Document 的內(nèi)容中,不僅可以包括普通的字符,還可以在里面使用變量,例如將上面的here.sh 改為
cat << HERE > output.shecho "This is output"echo $1HERE運(yùn)行命令:sh here.sh HereDocument?,然后查看output.sh的內(nèi)容如下:
echo "This is output"echo HereDocument,因?yàn)?#xff0c;HereDocument是here.sh腳本的第一個(gè)參數(shù),可以直接用shell中的特殊變量?$1表示,$1?被展開(kāi)成為?HereDocument。
注意:如果不想HERE之間的變量自動(dòng)展開(kāi),而是以字符串的形式正常輸出,可以通過(guò)在起始的 HERE 的前后添加冒號(hào)?"?來(lái)實(shí)現(xiàn),例如將上面的here.sh 改為
?
cat << "EOF" > output.shecho "This is output"echo $1EOF?
得到的output.sh 的內(nèi)容為??????:
echo "This is output"echo $1(3.2)<<?變?yōu)?<<-
Here Document 還有一個(gè)用法就是將 '<<' 變?yōu)?'<<-'。
使用?<<-?的唯一變化就是Here Document 的內(nèi)容部分每行前面的 tab (制表符)將會(huì)被刪除掉,這種用法是為了編寫(xiě)Here Document的時(shí)候可以將內(nèi)容部分進(jìn)行縮進(jìn),方便閱讀代碼。如:
cat <<- EOF > output.shecho "This is output"echo $1EOF得到的output.sh 的內(nèi)容為??????:
echo "This is output"echo $1但是如果使用的是?<<,那么output.sh 的內(nèi)容會(huì)變?yōu)?#xff1a;
echo "hello"echo "world"echo 之前的tab 不會(huì)被刪除!
4、參考鏈接
Wiki: Here Document
Learn Linux, 101: Streams, pipes, and redirects
本文主要參考了一下文章,并進(jìn)行相關(guān)修改:
https://my.oschina.net/u/1032146/blog/146941#OSC_h3_3
?
總結(jié)
以上是生活随笔為你收集整理的shell中的Here Document的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux shel的学习网站(推荐)
- 下一篇: 驱动编程中的头文件与内核源码的关系