Bash 中的 Here 文件
- 什麼是 Bash 中的文件
- 使用 Here Document 將多行字串放入 Bash 中的檔案
- 在 Bash 中使用 Here Document 互動式編寫指令碼
- 使用 Here 文件向 Bash 中的一個函式傳遞資料
- 在 Bash 中關閉 Here Document 中的引數替換
本教程解釋了 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 Tag
,EOF
,在我們的例子中。在這種情況下,輸出重定向運算子 >
用於將 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 Tag
是 EOF
。我們使用輸出重定向運算子 >
將輸出重定向到 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 Tag
、EOF
已使用單引號引起來,以避免此處文件中的引數替換。
引用第一個 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