Linux Bash 中的 Here Document 和 Here String


介紹

Bash 是一種 Unix shell 和命令語言,常用在 Linux 和其他基於 Unix 的作業系統中。它是一個強大的工具,用於自動化任務、管理系統配置以及在基於 Unix 的系統上執行各種其他操作。Bash 提供了一些特性,使其成為使用者強大而靈活的工具,包括對“Here Documents”和“Here Strings”的支援。

什麼是“Here Document”?

“Here Document”,也稱為“here doc”,是一種特殊的輸入重定向型別,允許使用者為命令指定多行輸入。這對於將長文字塊或指令碼程式碼指定為命令的輸入特別有用。

Here Documents 使用 << 運算子後跟分隔符來指定,分隔符可以是任何字串。然後在分隔符之後指定輸入行,並以僅包含分隔符的行(後跟分號;)終止。例如,以下命令使用 Here Document 為cat 命令指定多行輸入:

$ cat <<EOF
This is line 1 of the input.
This is line 2 of the input.
This is line 3 of the input.
EOF

在這個例子中,分隔符是“EOF”(代表“檔案結束”)。輸入行在分隔符和僅包含分隔符的終止行之間指定。執行命令時,cat 命令讀取輸入並將其顯示在螢幕上。

“Here Documents”還可以用於為接受指令碼程式碼作為輸入的命令指定輸入,例如awkperl。例如,以下命令使用 Here Document 為awk 命令指定一個指令碼:

$ awk '{print $1}' <<EOF
This is line 1 of the input.
This is line 2 of the input.
This is line 3 of the input.
EOF

在這個例子中,awk 命令將讀取輸入並執行在 Here Document 中指定的指令碼,該指令碼只打印每一行輸入的第一個欄位(例如列)。

什麼是 Here String?

“Here String”類似於 Here Document,但它使用單引號 (') 而不是雙小於號 (<<) 符號。與“Here Document”一樣,“Here String”允許使用者為命令指定多行輸入。但是,“Here String”被解釋為單個字串,而不是多行輸入。

“Here Strings”使用單引號後跟分隔符來指定,分隔符可以是任何字串。然後在分隔符之後指定字串,並以僅包含分隔符的行(後跟單引號)終止。例如,以下命令使用 Here String 為echo 命令指定一個多行字串:

$ echo 'This is a string
that spans multiple
lines.'

在這個例子中,分隔符是單引號本身。字串在分隔符和僅包含分隔符的終止行之間指定。執行命令時,echo 命令讀取輸入並將其作為單個字串顯示在螢幕上。

Here Strings 還可以用於為接受指令碼程式碼作為輸入的命令指定輸入,例如awkperl。例如,以下命令使用 Here String 為 awk 命令指定一個指令碼:

$ awk '{print $1}' 'BEGIN {FS=":"}
{print $1}'

在這個例子中,awk 命令將讀取輸入並執行在 Here String 中指定的指令碼,該指令碼將欄位分隔符設定為冒號 (:),然後列印每一行輸入的第一個欄位。

使用“Here Documents”和“Here Strings”

在使用Bash時,“Here Documents”和“Here Strings”在各種情況下都很有用。一些常見的用例包括:

  • 將長文字塊或指令碼程式碼指定為命令的輸入。

  • 建立易於閱讀和維護的指令碼或命令,方法是將其分解成多行。

  • 簡化為需要多行輸入的命令指定輸入的過程。

這是一個使用“Here Document”建立新檔案並將一些文字寫入其中的指令碼示例

#!/bin/bash
# Create a new file called "output.txt"
cat > output.txt <<EOF
This is line 1 of the output.
This is line 2 of the output.
This is line 3 of the output.
EOF

此指令碼使用cat 命令和> 運算子將輸出重定向到名為"output.txt"的新檔案。然後使用 Here Document 指定應寫入檔案中的文字。執行指令碼時,cat 命令將 Here Document 中指定的文字寫入"output.txt" 檔案。

這是一個使用 Here String 將多行字串作為引數傳遞給grep 命令的指令碼示例:

#!/bin/bash
# Search for a pattern in a multi-line string
grep 'pattern' 'line 1
line 2
line 3'

在這個例子中,grep 命令在 Here String 中指定的多行字串中搜索字串"pattern"。如果找到該字串,grep 命令將把匹配的行列印到螢幕上。

結論

“Here Documents”和“Here Strings”是Bash 中的有用功能,允許使用者為命令指定多行輸入。它們可以用來指定長文字塊或指令碼程式碼作為輸入,或者簡化指定需要多行輸入的命令的輸入過程。透過使用 Here Documents 和 Here Strings,使用者可以建立更易於閱讀和維護的指令碼和命令,並更有效地自動化基於 Unix 系統上的各種任務。

更新於:2023年1月4日

2K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.