在這篇文章中,我將介紹 Bash 中,括號的多種用途,包括: 輸出重導、輸入重導、進程替換、陣列操作,以及括號和中括號等。
輸出重導(Output Redirection)
輸出重導是 Bash 腳本中常用的功能之一,用來將命令的輸出保存到檔案中。
操作方式:
>
:將標準輸出(stdout)覆蓋寫入檔案。>>
:將標準輸出追加到檔案末尾。2>
:將標準錯誤輸出(stderr)重導到檔案。&>
:同時將標準輸出和標準錯誤重導到同一個檔案。
範例代碼:
1# 覆寫與追加輸出2echo "覆寫到 file1" > file13echo "追加到 file1" >> file14
5# 同時重導 stdout 和 stderr6ls . non_existent_dir &> output.log
輸入重導(Input Redirection)
輸入重導用來將檔案或字串內容作為命令的標準輸入(stdin)。
操作方式:
<
:將檔案內容作為命令的輸入。<<EOF
(Here Document):多行字串輸入,直到指定結束符(如EOF
)。<<<
(Here String):將單行字串作為命令的輸入。
範例代碼:
1# === 輸入重導 ===2cat < file13
4# === Here Document ===5cat <<EOF6line17line28EOF9
10# === Here String ===11grep "hello" <<< "hello world"12
13# === Read + Here String ===14read var <<< "hello"15echo "var=$var"
進程替換(Process Substitution)
進程替換是一種將命令的輸出模擬成檔案的功能,適合用於對比或合併處理。
範例代碼:
1diff <(echo "text1") <(echo "text2")
陣列與大括號(Array and Braces)
大括號 {}
在 Bash 中有多種用途,例如指令分組(Command Grouping)、快速生成字串或目錄結構(Brace Expansion),以及避免變數歧義。
範例代碼:
1# === 陣列操作 ===2arr=(1 2 3)3echo "arr[1]: ${arr[1]}"4
5# === Command Grouping ===6# 注意: 用於指令分組,`{` 與指令之間需要留空格7{8 echo "這是一個 Command Grouping"9 echo "可以在同一個 Shell 中執行多條命令"10}11
12# === Brace Expansion ===13echo "mkdir -p test/{2025..2030}/{01..12}"
中括號與雙中括號([ ] 和 [[ ]])
[ ]
:等同於test
命令,用於基本條件判斷。[[ ]]
:Bash 的擴展條件判斷,支持正則表達式等進階語法。
注意:
[
]
與判斷式必需有空白
範例代碼:
1# === [] ===2if [ "hello" = "hello" ]; then3 echo "Strings are equal"4fi5
6# === [[]] (使用 Regular Expression) ===7a=-1.18if [[ "$a" =~ ^-?[0-9]+$ ]]; then9 echo "$a 是整數"10else11 echo "$a 不是整數"12fi
圓括號與雙圓括號(( ) 和 (( )))
()
:可用於陣列宣告,或執行子 Shell。(( ))
:用於數值運算與條件比較。
範例代碼:
1# === Sub-Shell Example ===2(3 echo "這是一個 Sub-Shell"4 var=sub-test5 echo "var: ${var}"6)7echo var: ${var}8
9# === (()) 數值運算 ===10x=511y=1012(( sum = x + y ))13echo "sum=$sum"14
15if (( x < y )); then2 collapsed lines
16 echo "$x < $y"17fi