在 Linux Shell(如 Bash) 中,变量用于保存字符串、数字或命令结果,方便脚本复用和配置。下面系统讲解 Shell 变量的定义与使用方法 🐧
一、变量的定义
Shell 变量定义的基本语法:
变量名=值
⚠️ 注意:
- 等号两边不能有空格
示例:
name=Tom
age=20
二、变量的使用
使用变量时需要在变量名前加 $。
echo $name
echo $age
输出:
Tom
20
三、变量的命名规则
Shell 变量命名需要遵循:
1️⃣ 只能包含:
- 字母
- 数字
- 下划线
2️⃣ 不能数字开头
❌ 错误:
1name=Tom
3️⃣ 一般使用 大写字母表示常量
PI=3.14
四、变量值包含空格
如果变量值有空格,需要使用 引号。
双引号
name="Tom Jerry"
echo $name
输出:
Tom Jerry
单引号
name='Tom Jerry'
区别:
| 引号 | 特点 |
|---|---|
单引号 ' ' | 内容原样输出 |
双引号 " " | 可以解析变量 |
示例:
name=Tom
echo "Hello $name"
输出:
Hello Tom
五、变量拼接
如果变量和字符串连在一起,建议使用 花括号。
name=Tom
echo ${name}123
输出:
Tom123
否则:
echo $name123
会被认为是变量 name123。
六、只读变量
使用 readonly 定义只读变量。
readonly PI=3.14
之后不能修改:
PI=3.1415 # 报错
七、删除变量
使用 unset 删除变量。
name=Tom
unset name
删除后:
echo $name
不会输出内容。
八、环境变量
环境变量可以被 子进程 访问。
使用 export 定义:
export PATH=/usr/bin
示例:
export name=Tom
查看环境变量:
env
或:
printenv
九、命令替换(把命令结果赋值给变量)
两种写法:
方法1:反引号
date=`date`
方法2(推荐)
date=$(date)
示例:
now=$(date)
echo $now
十、变量类型(Shell默认都是字符串)
Shell 中默认变量类型:
字符串
如果要进行 数值运算:
a=10
b=20
echo $((a+b))
输出:
30
十一、位置参数变量
Shell 脚本可以接收参数:
./test.sh a b c
变量含义:
| 变量 | 含义 |
|---|---|
| $0 | 脚本名 |
| $1 | 第1个参数 |
| $2 | 第2个参数 |
| $# | 参数个数 |
| $@ | 所有参数 |
示例脚本:
#!/bin/bash
echo "script name: $0"
echo "first arg: $1"
echo "second arg: $2"
echo "total args: $#"
运行:
./test.sh hello world
输出:
script name: test.sh
first arg: hello
second arg: world
total args: 2
十二、特殊变量
常见特殊变量:
| 变量 | 含义 |
|---|---|
| $? | 上一个命令的返回值 |
| $$ | 当前进程ID |
| $! | 后台进程ID |
示例:
ls
echo $?
如果命令成功:
0
十三、完整示例
#!/bin/bash
name="Alice"
age=18
echo "Name: $name"
echo "Age: $age"
sum=$((10+20))
echo "Sum: $sum"
now=$(date)
echo "Time: $now"
运行结果:
Name: Alice
Age: 18
Sum: 30
Time: Tue Mar 11 ...
✅ 总结
Shell 变量常见操作:
定义变量 name=Tom
使用变量 $name
删除变量 unset name
只读变量 readonly name
环境变量 export name
命令替换 $(command)
数学运算 $((a+b))
如果你在学 Linux / DevOps / 运维 / 后端开发,我可以再给你整理一份 Shell 变量 + 条件判断 + 循环 的完整脚本模板(90%脚本都用这个结构),会非常实用。