Built-ins
部分內容由 LLM 生成,尚未經過人工驗證。
Bash 內建指令(built-in)直接由 shell 執行,不會 fork 子程序,速度較外部指令快。
I/O
| 指令 | 說明 | 範例 |
|---|---|---|
read | 從 stdin 讀取輸入,存入變數 | read -r line |
read -p | 顯示提示文字並讀取 | read -rp "Name: " name |
read -a | 讀取一行並分割為陣列 | read -ra arr <<< "a b c" |
read -s | 靜默模式(輸入不顯示,用於密碼) | read -rs pass |
read -t | 設定逾時秒數 | read -rt 5 input |
printf | 格式化輸出(比 echo 更可靠) | printf "%s\n" "$var" |
echo | 輸出字串(避免用於含特殊字元的變數) | echo "hello" |
變數管理
| 指令 | 說明 | 範例 |
|---|---|---|
declare | 宣告變數並設定屬性 | declare -i num=10 |
declare -i | 整數型別 | declare -i count=0 |
declare -r | 唯讀(同 readonly) | declare -r PI=3.14 |
declare -a | 索引陣列 | declare -a arr |
declare -A | 關聯陣列(associative array) | declare -A map |
declare -x | 匯出為環境變數(同 export) | declare -x PATH |
declare -p | 印出變數定義(debug 用) | declare -p arr |
local | 在函式內宣告區域變數 | local x=1 |
readonly | 設定變數為唯讀 | readonly CONFIG=/etc/app.conf |
export | 匯出變數給子程序 | export NODE_ENV=production |
unset | 刪除變數或函式 | unset myvar |
陣列
| 指令 | 說明 | 範例 |
|---|---|---|
mapfile | 將 stdin 各行讀入索引陣列(bash 4+) | mapfile -t lines < file.txt |
mapfile -t | 去除每行末尾的換行符 | mapfile -t arr <<< "$(ls)" |
readarray | mapfile 的別名 | readarray -t lines < file.txt |
腳本控制
| 指令 | 說明 | 範例 |
|---|---|---|
set -e | 任何指令失敗即退出 | set -e |
set -u | 使用未定義變數時報錯 | set -u |
set -o pipefail | pipeline 中任一失敗即視為失敗 | set -o pipefail |
set -x | 印出每條執行的指令(debug) | set -x |
shift | 移除第一個位置參數,其餘左移 | shift / shift 2 |
getopts | 解析短選項(-f, -v 等) | while getopts "f:v" opt; do ... |
trap | 攔截信號或事件並執行動作 | trap 'cleanup' EXIT |
trap ... EXIT | 腳本結束時執行(cleanup 常用) | trap 'rm -f "$tmp"' EXIT |
trap ... ERR | 任何指令出錯時觸發 | trap 'echo "error"' ERR |
eval | 將字串當作指令執行(謹慎使用) | eval "$cmd" |
作業 / 環境
| 指令 | 說明 | 範例 |
|---|---|---|
source / . | 在當前 shell 執行腳本(共享環境) | source ~/.bashrc |
exec | 用新指令取代當前 shell 程序 | exec python3 app.py |
jobs | 列出背景作業 | jobs |
wait | 等待背景作業完成 | wait $pid |
type | 顯示指令類型(built-in / file / alias) | type ls |
alias | 建立指令別名 | alias ll='ls -la' |
unalias | 移除別名 | unalias ll |
hash | 快取或清除指令路徑 | hash -r |