Linux Here Document 與 cat + EOF 的使用

Photo by Chrissie Giannakoudi on Unsplash
Photo by Chrissie Giannakoudi on Unsplash

cat 是日常中很常用到的指令,最近看到一個 cat + EOF 方式,於是想要寫篇文章來記錄一下使用方法。

Here Document

Here Doucment 在 Linux 中是一種特殊的重新導向方式,它的形式如下:

command << delimiter
content
delimiter

上面這個形式的意思就是將 delimiter 之間的內容,傳遞給 command 作為參數,以 cat 為範例:

Here Document

當輸入 cat << EOF 時,會發現到可以繼續再輸入其他的資訊,當輸入完成後,再輸入一次 EOF 就會將輸入的訊息列印出來。

接下來透過這樣的方式,將輸入的內容寫入 shell script 內:

$ cat << EOF > hello.sh
echo 'Here Doucment Test!'
EOF
$ cat hello.sh
# echo 'Here Doucment Test!'

如果你輸入的內容包含有變數的話,需要特別注意一下,延續上面的範例來進行另外一個實驗:

$ cat << EOF > hello.sh
echo 'Here Doucment Test!'
echo $1
echo $2
EOF
$ cat hello.sh 'Hey' 'Ho'
# Here Document Test!
#
#

結果沒有辦法印出我在 shell script 後所給的兩個參數,要解決這個情況必須在 EOF 前後加上「引號」:

$ cat << "EOF" > hello.sh
echo 'Here Doucment Test!'
echo $1
echo $2
EOF
$ cat hello.sh 'Hey' 'Ho'
# Here Document Test!
# Hey
# Ho

這樣便可以成功印出變數囉!