日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

shell中的Here Document

發(fā)布時(shí)間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell中的Here Document 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

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)

  • HERE只是一個(gè)標(biāo)識(shí)而已,可以替換成任意的合法字符,比如 eof 等
  • 作為結(jié)尾的HERE一定要頂格寫(xiě),前面不能有任何字符
  • 作為結(jié)尾的HERE后面也不能有任何的字符(包括空格)
  • 作為起始的HERE前后的空格會(huì)被省略掉

  • 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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。