跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Shell 脚本特殊变量实战:从参数传递到进程 ID

Shell 脚本开发中常需处理传入参数及运行状态。梳理了 $0 至 $$ 等关键特殊变量的含义,重点解析了 "$*" 与 "$@" 在双引号包裹下的行为差异。通过实际代码演示,展示了如何获取脚本名、参数个数、退出码及当前进程 ID,帮助开发者编写更健壮的自动化脚本。

颠三倒四发布于 2020/6/15更新于 2026/6/1419 浏览
Shell 脚本特殊变量实战:从参数传递到进程 ID

在编写 Shell 脚本时,除了自定义变量,系统预定义的特殊变量同样不可或缺。它们能帮助我们快速获取脚本自身信息、命令行参数详情或执行状态。

常用特殊变量速查

  • $0:当前脚本的文件名(包含路径)
  • $n:第 n 个参数,例如 $1 是第一个参数
  • $#:传递给脚本的参数总个数
  • $*:所有参数,视为一个整体字符串
  • $@:所有参数,视为独立的列表
  • $?:上一个命令的退出状态(成功通常为 0,失败为 1)
  • $$:当前 Shell 进程的 ID

$* 与 $@ 的区别

这两个变量都代表所有参数,但在未加引号时表现基本一致。真正的区别在于双引号的使用场景:

当使用 "$*" 时,所有参数会被合并为一个整体字符串,中间用空格分隔;而 "$@" 则会保持每个参数的独立性,即使参数中包含空格也不会被拆分。这在遍历函数参数或构建复杂命令时非常关键。

实战示例

下面的脚本演示了这些变量的具体用法,特别是 $* 和 $@ 在循环中的不同表现。

#!/bin/bash
echo "File name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "print each param from \"\$*\""
for var in "$*"; do
    echo "$var"
done
echo "print each param from \"\$@\""
for var in "$@"; do
    echo "$var"
done
echo "Total Number of Parameters : $#"
echo "Shell ID : $$"
echo "Exit Status : $?"

假设保存为 test.sh 并执行 ./test.sh 1 2 3,输出结果如下:

File name: ./test.sh
First Parameter : 1
Second Parameter : 2
Quoted Values: 1 2 3
Quoted Values: 1 2 3
print each param from "$*"
1 2 3
print each param from "$@"
1
2
3
Total Number of Parameters : 3
Shell ID : 19672
Exit Status : 0

注意观察循环部分,"$*" 将参数当作一个整体迭代了一次,而 "$@" 则逐个迭代了三个参数。理解这一细节,能让你的脚本在处理复杂输入时更加稳健。

目录

  1. 常用特殊变量速查
  2. $* 与 $@ 的区别
  3. 实战示例
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw 与 cpolar 组合实现私人 AI 外网访问教程
  • 数据结构:顺序表与链表详解
  • Meta 发布 Llama 3 系列模型:性能飞跃与开放策略
  • Python 开发环境安全:为何不应在下载目录直接运行脚本
  • Java 异常处理机制与全局异常拦截实践
  • Vue3+Python 气象数据共享平台设计与实现
  • AI 大模型产品经理转行指南:核心能力与实战路径
  • 在 Windows 10/11 上使用 VMware 17 Pro 安装 macOS 官方镜像虚拟机
  • C++ STL stack、queue 及 priority_queue 深度剖析
  • Web 虚拟卡销售平台架构设计与核心实现
  • 字节 Trae 腾讯 CodeBuddy 阿里 Qoder 集成 OneCode 低代码平台对比
  • C++26 反射类型检查的里程碑意义与核心机制
  • 大模型方向产品经理面试经验与答案解析
  • 离线私有 GPT 构建指南:基于本地大模型的数据隐私保护方案
  • 人工智能、机器学习与深度学习的关系及区别
  • Vitis 实现 AI 模型 FPGA 部署实战教程
  • 40 道 Python 经典面试题及参考答案
  • OpenClaw 集成百度网页搜索技能:安装与配置
  • 无需插件:Copilot 接入第三方 OpenAI 接口配置方法
  • VSCode + Continue + Ollama 搭建本地 AI 编程助手

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online