Bash 中的 Here 文件

Fumbani Banda 2023年1月30日
  1. 什麼是 Bash 中的文件
  2. 使用 Here Document 將多行字串放入 Bash 中的檔案
  3. 在 Bash 中使用 Here Document 互動式編寫指令碼
  4. 使用 Here 文件向 Bash 中的一個函式傳遞資料
  5. 在 Bash 中關閉 Here Document 中的引數替換
Bash 中的 Here 文件

本教程解釋了 here 文件是什麼以及它在將多行字串寫入檔案、以互動方式編寫 Bash 指令碼、將其與函式一起使用以及關閉引數替換的用法。

什麼是 Bash 中的文件

Heredoc 是這裡文件的縮寫。Heredoc 使用互動式程式為命令提供輸入。heredoc 使用 Here Tag 來指示命令輸入的結束。

第一個 Here Tag 定義將指示輸入結束的 Here Tag。此處文件使用的符號如下所示。

command <<Here Tag
>command1
>command2
>command3
>Here Tag

第一個 Here Tag 前面是 << 符號。該符號將 here document 的互動式輸入引導到 command 作為進一步處理的標準輸入。

定義 Here Tag 時,請確保它不應出現在命令列表中以避免混淆。

使用 Here Document 將多行字串放入 Bash 中的檔案

我們使用 here 文件和 cat 命令以互動方式將多行字串輸入到文字檔案中。 << 符號後面的 EOF 定義了此處文件的 Here Tag

這意味著我們將在互動式 shell 上輸入一個多行字串,直到 shell 看到 Here TagEOF,在我們的例子中。在這種情況下,輸出重定向運算子 > 用於將 cat 命令的標準輸出定向到指定檔案 output.txt

cat <<EOF > output.txt
> Hello user.
> Welcome to DelftStack.
> Hope you enjoy your stay.
> EOF

使用符號 >>,作為重定向運算子將 cat 命令的輸出附加到指定檔案,而 > 符號建立一個新檔案,如果檔案已經存在,它會重新寫入內容的檔案。

在 Bash 中使用 Here Document 互動式編寫指令碼

我們使用 here 文件和 cat 命令以互動方式編寫 Bash 指令碼並將輸出重定向到 Bash 指令碼。我們在 << 符號之後定義 Here Tag,並用 Here Tag 界定互動式輸入的結尾。

下面指令碼中的 Here TagEOF。我們使用輸出重定向運算子 > 將輸出重定向到 Bash 指令碼 echo.sh

cat <<EOF > echo.sh
> #!/bin/bash
>
> echo "Hello World!"
> echo "Welcome to DelftStack."
> EOF

使用 cat 命令,我們檢查 echo.sh 指令碼的內容。

cat echo.sh

我們使用下面輸出中的 here 文件成功編寫了 Bash 指令碼。

#!/bin/bash

echo "Hello World!"
echo "Welcome to DelftStack."

使用 Here 文件向 Bash 中的一個函式傳遞資料

下面的指令碼從這裡的文件中讀取輸入。我們在指令碼中定義了一個名為 GetPersonalInfo 的函式。該函式具有讀取輸入資料的命令。

我們使用 here 文件將輸入資料傳遞給函式,並使用 echo 命令將資料顯示到標準輸出。函式內部定義的變數可以在函式外部訪問,因為 Bash 中的變數預設是全域性的,除非 local 關鍵字已定義它們。

#!/bin/bash
GetPersonalInfo(){
    read fname
    read lname
    read country
}

GetPersonalInfo <<EOF
John
Doe
USA
EOF

echo "Personal Information"
echo
echo "First Name: $fname"
echo "Last name: $lname"
echo "Country of Residence: $country"

執行 Bash 指令碼會產生以下輸出。

Personal Information

First Name: John
Last name: Doe
Country of Residence: USA

在 Bash 中關閉 Here Document 中的引數替換

我們使用下面指令碼中的 here 文件從現有指令碼生成一個新指令碼。Here TagEOF 已使用單引號引起來,以避免此處文件中的引數替換。

引用第一個 Here Tag 告訴 here 文件在 here 文件中保留特殊字元的字面含義。

#!/bin/bash
echo "This script generates another script."

cat <<'EOF' > add.sh
#!/bin/bash

x=10
y=11

let "sum = $x + $y"
echo "Total of $x and $y is $sum"
EOF

我們使用 cat 命令檢查新生成的指令碼 add.sh 的內容。

#!/bin/bash
x=10
y=11

let "sum = $x + $y"
echo "Total of $x and $y is $sum"

執行新生成的指令碼會在終端產生以下輸出。

Total of 10 and 11 is 21
作者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub