here文檔

在shell腳本程式中向一條命令傳遞輸入的一種特殊方法是使用here文檔,它允許一條命令在獲得輸入數據時就好像是在讀取一個檔案或鍵盤一樣,而實際上是從腳本程式中得到輸入數據。

here文檔以兩個連續的小於號<<開始,緊跟著一個特殊的字元序列,該字元序列在文檔結尾處再次出現。<<是shell的標籤重定向符,在這裡,它強制命令的輸入是一個shell文檔。這個特殊字元序列的作用就像一個標記,它告訴shell here文檔結束的位置。因為這個標記序列不能出現在傳遞給命令的文檔內容中,所以應該儘量使它即容易記憶有相當不尋常。
實例一:使用here文檔
最簡單的例子就是給cat命令提供輸入數據,如下所示:
#!/bin/sh
cat <<!FUNKY!
hello
this is a here
document
!FUNKY!
它的輸出如下所示:
hello
this is a here
document
here文檔功能開起來相當奇怪,但其實它的作用很大。因為它可以用來調用互動式的程式,比如一個編譯器,並向他提供一些事先定義好的輸入。但他更常見的用途是在腳本程式中輸入大量的文本,就像你剛才的示例中看到的那樣,從而可以避免用echo語句來輸出每一行,你可以在標識符兩端都是用感嘆號(!)來確保不會引起混淆。
如果想按預定義的方式處理一個檔案中的幾行,你可以使用ed行編輯器,並在腳本程式中通過here文檔向它提供命令。
實驗二:here文檔的另一個用法
(1)我們從名為a_text_file的檔案開始,它的內容如下所示:
That is line 1
That is line 2
That is line 3
That is line 4
(2)你可以通過結合使用here文檔和ed編輯器來編輯這個檔案:
#!/bin/sh
ed a_text_file <<!FUNKYStuff!
3
d
. ,\$s/is/was/
w
q
<<!FUNKYStuff!
exit 0
運行這個腳本程式,現在這個檔案的內容是:
That is line 1
That is line 2
That was line 4
實驗分析:
這個腳本程式只是在調用ed編輯器並向它傳遞命令,先讓他移動到第三行,然後刪除該行,再把當前行(因為第三行剛剛被刪除,所以當前行就是原來最後一行,即第四行)中is替換was。完成這些操作的ed命令來自腳本程式中的here文檔——在標記!FUNKYStuff!之間的那些內容。

相關詞條

熱門詞條

聯絡我們