Shell特殊环境变量
来源
原始文档: SHELL 特殊环境变量.md
核心内容
Shell 脚本中的特殊变量和它们的用途。
位置参数
| 变量 | 说明 |
|---|---|
$0 |
脚本名称 |
$1 - $9 |
第1-9个参数 |
${10}+ |
第10个及以上参数 |
$# |
参数个数 |
$* |
所有参数(单个字符串) |
$@ |
所有参数(数组) |
特殊状态变量
| 变量 | 说明 |
|---|---|
$? |
上条命令退出状态码(0成功,非0失败) |
$$ |
当前 Shell 进程 PID |
$! |
最后后台运行的进程 PID |
$_ |
上条命令最后一个参数 |
$- |
当前 Shell 的选项标志 |
使用示例
#!/bin/bash
echo "脚本名称: $0"
echo "参数数量: $#"
echo "所有参数: $@"
echo "第一个参数: $1"
# 检查命令执行结果
ls /nonexistent 2>/dev/null
if [ $? -ne 0 ]; then
echo "命令执行失败"
fi
# 后台运行并获取 PID
sleep 100 &
BG_PID=$!
echo "后台进程 PID: $BG_PID"
默认值设置
# 如果变量未定义,使用默认值
${VAR:-default}
# 如果变量未定义,设置并返回值
${VAR:=default}
# 如果变量已定义,返回值
${VAR:+value}
# 如果变量未定义,报错退出
${VAR:?error message}
字符串操作
VAR="Hello World"
# 字符串长度
${#VAR} # 11
# 截取子串
${VAR:0:5} # Hello
${VAR:6} # World
# 删除匹配前缀
${VAR#Hello } # World
${VAR##*l} # o World
# 删除匹配后缀
${VAR% World} # Hello
${VAR%%H*} # (空)
# 替换
${VAR/World/Universe} # Hello Universe
${VAR//l/L} # HeLLo WorLd
关键要点
$?是脚本错误处理的关键$@和$*在引号中表现不同- 后台进程 PID 可用于后续管理
- 字符串操作可避免外部命令调用,提升性能
相关实体
- Bash - Bourne Again Shell
- Shell - Shell 环境
- 脚本编程 - Shell 脚本开发