当前位置: 首页 > news >正文

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 脚本的编写效率! 

 

http://www.xdnf.cn/news/986689.html

相关文章:

  • python使用SQLAlchemy 库操作本地的mysql数据库
  • python基本语法元素
  • python-docx 库教程
  • Oracle中10个索引优化
  • 美团NoCode中的Dev Mode 使用指南
  • 在windows中安装或卸载nginx
  • spring boot源码和lib分开打包
  • 遍历 unordered_map
  • GFS 分布式文件系统
  • UE_Event Any Damage和OnTake Any Damage
  • JAVA CAS 详解
  • Docker完整教程 - 从入门到SpringBoot实战
  • JSON5 模块的作用与区别
  • 图标异常问题
  • 【Linux】进程控制(下)---程序替换宝藏岛
  • 如何排查PHP-FPM进程CPU占用100%的间歇性问题 (2025)
  • Unity 服务器交互开发指南
  • 基于RocketMQ源码理解顺序写、刷盘机制与零拷贝
  • 海康对接摄像头
  • Chromium 136 编译指南 Windows篇:获取源代码(五)
  • 基于贝叶斯学习方法的块稀疏信号压缩感知算法
  • Spring核心框架完全指南 - 基础知识全解析
  • 关于界面存在AB测试后UI刷新空白的问题
  • 计算机网络 : 传输层协议UDP与TCP
  • 设计原则——KISS原则
  • 过拟合和欠拟合
  • RAG技术全解析:从概念到实践,构建高效语义检索系统——嵌入模型与向量数据库搭建指南
  • java每日精进 6.11【消息队列】
  • C++11的特性上
  • Cursor 编程实践 — 开发环境部署