当前位置:首页 > 技术 > 正文内容

Shell脚本变量完全指南

访客 技术 2026年6月5日 1

变量基础概念

变量是计算机编程中的基本概念,用于存储数值或表示特定含义的数据。在Shell脚本中,变量通过名称来标识和访问,理解变量的使用规则对于编写高效的Shell脚本至关重要。

变量命名与赋值规则

Shell变量的命名需要遵循特定规则:

  • 变量名由字母、数字和下划线组成,禁止以数字开头
  • 使用等号进行赋值,赋值符号两侧不能存在空格
  • 变量可存储整数和字符串两种基本类型
  • 字符串赋值时建议使用引号包裹,含有空格的内容必须使用引号

单引号与双引号的作用不同:单引号内所有内容保持原样输出,双引号内若包含变量则会进行变量替换。

$ MY_VAR=100
$ STR1="${MY_VAR}"
$ STR2='${MY_VAR}'
$ echo $STR1
100
$ echo $STR2
${MY_VAR}

调用变量时需在变量名前加美元符号。若需拼接变量值与字符串,建议使用双引号或${变量名}形式。

$ APP=nginx
$ echo $APP
nginx
$ echo ${APP}conf
nginxconf
$ echo "$APP"conf
nginxconf
$ echo $APPconf    //变量名连续可能导致意外结果
conf

变量类型详解

按功能分类

Shell变量按其作用可分为以下四类:

1. 环境变量

环境变量存储系统运行环境相关信息,通常使用大写字母命名。通过env命令可查看当前会话的所有环境变量。

$ env
USER=developer
HOME=/home/developer
PATH=/usr/local/bin:/usr/bin:/bin
SHELL=/bin/bash
TERM=xterm-256color
LANG=zh_CN.UTF-8
PWD=/home/developer
...

系统命令的执行依赖于PATH环境变量,Shell会按照PATH指定的路径顺序查找可执行文件。

$ which ls
/bin/ls
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable

2. 用户自定义变量

用户根据实际需求自行创建的变量,仅在当前Shell会话中生效。

$ CUSTOM_VAR=hello
$ echo $CUSTOM_VAR
hello

3. 位置参数变量

用于向脚本传递参数,变量名由系统固定定义:

  • $0 - 脚本文件名
  • $1, $2, $3... - 第1、2、3个参数
  • ${10} - 第10个及以上参数需使用花括号
$ cat test.sh
#!/bin/bash
echo "脚本名称: $0"
echo "第一个参数: $1"
echo "第三个参数: $3"

$ bash test.sh alpha beta gamma
脚本名称: test.sh
第一个参数: alpha
第三个参数: gamma

$ bash /home/developer/test.sh a b c
脚本名称: /home/developer/test.sh
第一个参数: a
第三个参数: c

4. 预定义变量

Shell内置的已定义变量,具有固定用途,不可自定义命名。

按作用域分类

1. 全局变量

即环境变量,其作用范围覆盖整个系统会话,不会随脚本执行结束而消失。

2. 局部变量

仅在定义它的程序或脚本内部有效,包括用户自定义变量、位置参数变量和预定义变量。

变量操作

删除变量

使用unset命令可删除已定义的变量,删除后变量将不存在。

$ TEMP=123
$ echo $TEMP
123
$ unset TEMP
$ echo $TEMP

环境变量管理

临时环境变量

仅在当前Shell会话中有效,会话结束后失效。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/sbin
$ PATH=/opt/tools:$PATH
$ echo $PATH
/opt/tools:/usr/local/bin:/usr/bin:/bin:/sbin
$ myscript.sh
hello

使用export命令可使环境变量对子Shell进程可见:

$ export NEW_PATH=/usr/local/app:$PATH

永久环境变量

将变量写入配置文件可实现永久生效:

  • /etc/profile - 系统全局配置,影响所有用户
  • /etc/bashrc - Shell全局配置
  • ~/.bashrc - 当前用户Shell配置
  • ~/.bash_profile - 当前用户登录环境配置

配置文件加载顺序:/etc/profile → /etc/bashrc → ~/.bashrc → ~/.bash_profile。同名变量后加载的配置会覆盖先前的值。

# vim /etc/profile
# 在文件末尾添加
MYENV="persistent_value"

# 重新加载配置
# source /etc/profile
# 或
# . /etc/profile

# 验证结果
# echo $MYENV
persistent_value

特殊变量

Shell提供了一系列具有特殊含义的预定义变量:

  • $# - 传递给脚本的参数总数
  • $* - 所有参数合并成的字符串
  • $$ - 当前Shell进程的PID
  • $? - 上一个命令的退出状态(0表示成功,非0表示失败)
  • $! - 最近后台任务的PID
标签: ShellBash

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

PHPStan 有什么用?怎么用?

PHPStan 是一个 PHP 的静态分析工具,在不运行代码的情况下就能帮你发现潜在问题,比如:传错类型(把 string 传给接受 int 的函数)访问不存在的属性 / 方法null 没处理好永远不会执行到的代码数组 key/值类型不一致返回值不符合声明注释和真实类型不匹配它非常适合:想提升代码质量、减少线上 bug、统一团队风格的人(尤其是中大型项目)。一、PHPStan 有什么用(通俗点说)...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。