shell基礎之EOF的用法


一、EOF的用法

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

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

其用法如下:

<<EOF        #開始

....                  #輸入內容

EOF            #結束

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

<<ABC        #開始

....

ABC              #結束

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

<:輸入重定向

>:輸出重定向

>>:輸出重定向,進行追加,不會覆蓋之前內容

<<:標准輸入來自命令行的一對分隔號的中間內容

例子1

[root@ren5 ~]# cat <<EOF

> hello

> EOF

hello

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

也就是說我們可以用一個文件來替代"<< EOF EOF"

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

例子2

[root@ren5 ~]# cat 1.txt

abc

[root@ren5 ~]# cat <<EOF > 1.txt             #向文件1.txt輸入覆蓋內容(也可以:cat > 1.txt <<EOF

> 123

> 456

> 678

> LOL

> EOF

[root@ren5 ~]# cat 1.txt

123

456

678

LOL

<< EOF EOF”的作用是在命令執行過程中用戶自定義輸入,它類似於起到一個臨時文件的作用,只是比使用文件更方便靈活。

二、cat <<EOF 與 cat <<-EOF 的區別

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

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

如果重定向的操作符是<<-,那么分界符(EOF)所在行的開頭部分的制表符(Tab)都將被去除。這可以解決由於腳本中的自然縮進產生的制表符

例子1

[root@ren5 ~]# cat 2.sh

#!/bin/bash

cat <<EOF

你好,EOF

EOF

[root@ren5 ~]# sh 2.sh

你好,EOF

[root@ren5 ~]# sh 2.sh

2.sh:4: 警告:立即文檔在第 2 行被文件結束符分隔 (需要 `EOF')

你好,EOF

      EOF

如果結束分解符EOF前有制表符或者空格,則EOF不會被當做結束分界符,只會繼續被當做stdin來輸入。

例子2

[root@ren5 ~]# cat 2.sh

#!/bin/bash

cat <<-EOF

你好,EOF

      EOF

[root@ren5 ~]# sh 2.sh

你好,EOF

雖然最后的EOF前面有多個制表符和空格,但仍然會被當做結束分界符,表示stdin的結束。


免責聲明!

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



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