指令語法
set [--abefhkmnptuvxldCHP] [-o 選項名稱] [引數...]
常用單字母選項
| 選項 | 功能 |
| -e | 指令傳回非零值立即結束(errexit) |
| -u | 展開未設定變數視為錯誤(nounset) |
| -x | 顯示執行指令與引數(xtrace) |
| -v | 顯示讀取的輸入行(verbose) |
| -n | 語法檢查模式,不執行指令(noexec) |
| -f | 停用檔名擴展(noglob) |
| -m | 啟用工作控制(monitor) |
| -C | 防止重導向覆蓋既有檔案(noclobber) |
-o 選項名稱對照表
| 選項名稱 | 等同單字母 | 說明 |
| allexport | -a | 自動匯出修改過的變數 |
| braceexpand | - | 啟用大括號擴展(預設開啟) |
| emacs | - | Emacs 風格命令列編輯 |
| vi | - | Vi 風格命令列編輯 |
| ignoreeof | - | 忽略 EOF,需輸入 exit 離開 |
| noclobber | -C | 防止覆蓋檔案 |
| nounset | -u | 未設定變數視為錯誤 |
| posix | - | POSIX 相容模式 |
特殊參數處理
--:結束選項處理,後續參數指派給位置參數 $1, $2...
-:關閉 -x 與 -v,將剩餘參數指派給位置參數
- 不帶參數執行
set:顯示所有 Shell 變數(含函數)
實務應用範例
除錯腳本
set -eux # 錯誤即停、未定義變數報錯、顯示執行軌跡
嚴格模式
set -euo pipefail # 管線任一指令失敗視為整體失敗
位置參數重設
set -- "參數1" "參數2" "參數3" # 重新定義 $1, $2, $3
查看目前選項狀態
echo $- # 顯示目前啟用的單字母選項
set -o # 顯示所有 -o 選項狀態
注意事項
set -e 在管線、子 Shell、條件判斷中行為不同,需謹慎使用
- 互動式 Shell 預設啟用
-m、-h、emacs 等選項
- 權限模式
-p 會忽略 $ENV、不繼承 Shell 函數
善用 set 指令能讓 Shell 腳本更健壯、更易除錯,是進階 Shell 程式設計的必備技能。