LoongLee's blog

Shell特殊环境变量

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 脚本开发