在 Bash 腳本和命令行中,?特殊變量?(Special Variables)主要用于獲取腳本或命令的上下文信息,如參數、進程狀態、返回值等。以下是常見的特殊變量及其典型應用場景:
?1. 腳本參數處理?
$0
、$1
、$2
?...?$9
、${10}
...
- ?作用?:獲取腳本或函數的參數。
- ?典型用途?:
?運行示例?:# script.sh echo "腳本名稱: $0" echo "第一個參數: $1" echo "第二個參數: $2"
?輸出?:./script.sh hello world
腳本名稱: ./script.sh 第一個參數: hello 第二個參數: world
$#
- ?作用?:獲取傳遞給腳本或函數的參數個數。
- ?典型用途?:
if [ $# -eq 0 ]; thenecho "錯誤:請提供參數!"exit 1 fi
$*
?和?$@
- ?作用?:獲取所有參數。
$*
:所有參數合并成一個字符串("$1 $2 $3 ..."
)。$@
:每個參數單獨處理("$1" "$2" "$3" ...
),適用于循環遍歷。
- ?典型用途?:
for arg in "$@"; doecho "參數: $arg" done
?2. 進程和返回值?
$$
- ?作用?:獲取當前 Shell 或腳本的 ?PID(進程 ID)?。
- ?典型用途?:
?輸出?:echo "當前進程 ID: $$"
當前進程 ID: 12345
$?
- ?作用?:獲取 ?上一條命令的退出狀態碼?(0 表示成功,非 0 表示失敗)。
- ?典型用途?:
或者:grep "keyword" file.txt if [ $? -ne 0 ]; thenecho "未找到 keyword!" fi
command || echo "命令執行失敗!"
$!
- ?作用?:獲取 ?最后一個后臺運行的進程 PID。
- ?典型用途?:
sleep 10 & echo "后臺進程 PID: $!"
?3. 腳本自身信息?
$0
- ?作用?:獲取 ?腳本名稱或 Shell 名稱。
- ?典型用途?:
?輸出?:echo "當前腳本: $0"
當前腳本: ./test.sh
$_
- ?作用?:獲取 ?上一個命令的最后一個參數。
- ?典型用途?:
?輸出?:ls /usr/bin echo "上一個命令的最后一個參數: $_"
/usr/bin 上一個命令的最后一個參數: /usr/bin
?4. 通配符和擴展?
$*
?和?$@
(在雙引號中的區別)
- ?**
"$*"
**?:所有參數合并成一個字符串("$1 $2 $3"
)。 - ?**
"$@"
**?:每個參數單獨處理("$1" "$2" "$3"
),適用于循環遍歷。 - ?典型用途?:
for arg in "$@"; doecho "參數: $arg" done
?5. 其他特殊變量?
$RANDOM
- ?作用?:生成 ?隨機數(0-32767)?。
- ?典型用途?:
echo "隨機數: $RANDOM"
$SECONDS
- ?作用?:獲取 ?腳本運行時間(秒)?。
- ?典型用途?:
sleep 3 echo "運行時間: $SECONDS 秒"
?總結?
變量 | 作用 | 典型用途 |
---|---|---|
$0 | 腳本名稱 | 獲取當前腳本名 |
$1 -$9 | 腳本參數 | 處理命令行參數 |
$# | 參數個數 | 檢查參數數量 |
$* | 所有參數(合并) | 整體處理參數 |
$@ | 所有參數(獨立) | 循環遍歷參數 |
$? | 上一條命令的返回值 | 檢查命令是否成功 |
$$ | 當前進程 PID | 記錄進程 ID |
$! | 最后一個后臺進程 PID | 管理后臺任務 |
$_ | 上一個命令的最后一個參數 | 快速引用參數 |
$RANDOM | 隨機數 | 生成隨機值 |
$SECONDS | 腳本運行時間 | 計時 |
這些特殊變量在 ?腳本參數處理、錯誤檢查、進程管理、日志記錄? 等場景中非常有用,熟練掌握它們可以大幅提升 Bash 腳本的編寫效率!?
?