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”還可以用於為接受指令碼程式碼作為輸入的命令指定輸入,例如awk 或perl。例如,以下命令使用 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 還可以用於為接受指令碼程式碼作為輸入的命令指定輸入,例如awk 或perl。例如,以下命令使用 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 系統上的各種任務。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP