EOF用法


一、EOF的基本用法

EOF是(END Of File)的縮寫,表示自定義終止符。既然自定義,那么EOF就不是固定的,可以隨意設置別名,在linux按ctrl-d 就代表EOF。

EOF一般會配合cat能夠多行文本輸出。

其用法如下:

<<EOF        #開始

....         #輸入內容

EOF          #結束

還可以自定義,比如自定義:

<<ABC        #開始

....		 #輸入內容

ABC          #結束

通過cat配合重定向能夠生成文件並追加操作,在它之前先熟悉幾個特殊符號

<:輸入重定向
>:輸出重定向
<<:標准輸入來自命令行的一對分隔號的中間內容
>>:輸出重定向,進行追加,不會覆蓋之前內容

例如1:

[root@localhost tmp]#  cat <<EOF
> hello world
> EOF
hello world
[root@localhost tmp]#

我們知道cat的操作對象是文件,但是例1中cat的操作對象不是文件,而是用戶輸入;那么我們可以這樣理解例1:先在文件file中輸入“Hello”,再用cat file輸出其中的內容。也就是說我們可以用一個文件來替代"<< EOF EOF"。

反過來說,如果操作命令中的文件是輸入對象,也可以用"<< EOF EOF"來替代的。

例如2:

[root@localhost tmp]# cat test.log
abc
[root@localhost tmp]#
[root@localhost tmp]# cat <<EOF >test.log
> pig
> cat
> dog
> EOF
[root@localhost tmp]#
[root@localhost tmp]# cat test.log
pig
cat
dog
[root@localhost tmp]#

在例2中,我們在test.log中,先用<<EOF ... EOF進行stdin的輸入,在用>重定向到test.log中,將test.log原有的內容覆蓋。

二、cat <<EOF 與 cat <<-EOF 的區別
  • 共同點

兩個都是獲取stdin,並在EOF處結束stdin,輸出stdout。

  • 不同點

cat <<EOF:我們輸入完成后,需要在一個新的一行輸入EOF結束stdin的輸入。EOF必須頂行寫,前面不能用制表符或者空格。

例如3:(EOF頂格)

[root@localhost tmp]# cat test.log
#!/usr/bin/bash

#!/bin/bash

cat <<EOF

hello,EOF!

EOF

[root@localhost tmp]#
[root@localhost tmp]# sh test.log

hello,EOF!

[root@localhost tmp]#

cat <<-EOF:那么分界符(EOF)所在行的開頭部分的制表符(Tab)都將被去除。這可以解決由於腳本中的自然縮進產生的制表符。

例如4:(EOF未頂格)

[root@localhost tmp]# cat test.log
#!/usr/bin/bash

#!/bin/bash

cat <<EOF

hello,EOF!

	EOF

[root@localhost tmp]# sh test.log
test.log: line 9: warning: here-document at line 5 delimited by end-of-file (wanted `EOF')

hello,EOF!

 EOF
[root@localhost tmp]#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM