Bash 脚本中的特殊变量
在 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 脚本的编写效率!