Vinc3nt's Life

Linux 學習筆記 02:Bash 括號與重導向

2025-01-01
develop
linux
bash
redirection
bash-operators
最後更新:2025-02-14
4分鐘
655字

在這篇文章中,我將介紹 Bash 中,括號的多種用途,包括: 輸出重導、輸入重導、進程替換、陣列操作,以及括號和中括號等。


輸出重導(Output Redirection)

輸出重導是 Bash 腳本中常用的功能之一,用來將命令的輸出保存到檔案中。

操作方式:

  • >:將標準輸出(stdout)覆蓋寫入檔案。
  • >>:將標準輸出追加到檔案末尾。
  • 2>:將標準錯誤輸出(stderr)重導到檔案。
  • &>:同時將標準輸出和標準錯誤重導到同一個檔案。

範例代碼:

Terminal window
1
# 覆寫與追加輸出
2
echo "覆寫到 file1" > file1
3
echo "追加到 file1" >> file1
4
5
# 同時重導 stdout 和 stderr
6
ls . non_existent_dir &> output.log

輸入重導(Input Redirection)

輸入重導用來將檔案或字串內容作為命令的標準輸入(stdin)。

操作方式:

  • <:將檔案內容作為命令的輸入。
  • <<EOF(Here Document):多行字串輸入,直到指定結束符(如 EOF)。
  • <<<(Here String):將單行字串作為命令的輸入。

範例代碼:

Terminal window
1
# === 輸入重導 ===
2
cat < file1
3
4
# === Here Document ===
5
cat <<EOF
6
line1
7
line2
8
EOF
9
10
# === Here String ===
11
grep "hello" <<< "hello world"
12
13
# === Read + Here String ===
14
read var <<< "hello"
15
echo "var=$var"

進程替換(Process Substitution)

進程替換是一種將命令的輸出模擬成檔案的功能,適合用於對比或合併處理。

範例代碼:

Terminal window
1
diff <(echo "text1") <(echo "text2")

陣列與大括號(Array and Braces)

大括號 {} 在 Bash 中有多種用途,例如指令分組(Command Grouping)、快速生成字串或目錄結構(Brace Expansion),以及避免變數歧義。

範例代碼:

Terminal window
1
# === 陣列操作 ===
2
arr=(1 2 3)
3
echo "arr[1]: ${arr[1]}"
4
5
# === Command Grouping ===
6
# 注意: 用於指令分組,`{` 與指令之間需要留空格
7
{
8
echo "這是一個 Command Grouping"
9
echo "可以在同一個 Shell 中執行多條命令"
10
}
11
12
# === Brace Expansion ===
13
echo "mkdir -p test/{2025..2030}/{01..12}"

中括號與雙中括號([ ] 和 [[ ]])

  • [ ]:等同於 test 命令,用於基本條件判斷。
  • [[ ]]:Bash 的擴展條件判斷,支持正則表達式等進階語法。

注意: [ ]與判斷式必需有空白

範例代碼:

Terminal window
1
# === [] ===
2
if [ "hello" = "hello" ]; then
3
echo "Strings are equal"
4
fi
5
6
# === [[]] (使用 Regular Expression) ===
7
a=-1.1
8
if [[ "$a" =~ ^-?[0-9]+$ ]]; then
9
echo "$a 是整數"
10
else
11
echo "$a 不是整數"
12
fi

圓括號與雙圓括號(( ) 和 (( )))

  • ():可用於陣列宣告,或執行子 Shell。
  • (( )):用於數值運算與條件比較。

範例代碼:

Terminal window
1
# === Sub-Shell Example ===
2
(
3
echo "這是一個 Sub-Shell"
4
var=sub-test
5
echo "var: ${var}"
6
)
7
echo var: ${var}
8
9
# === (()) 數值運算 ===
10
x=5
11
y=10
12
(( sum = x + y ))
13
echo "sum=$sum"
14
15
if (( x < y )); then
2 collapsed lines
16
echo "$x < $y"
17
fi
本文標題:Linux 學習筆記 02:Bash 括號與重導向
文章作者:Vincent Lin
發布時間:2025-01-01