在Linux命令行操作中,变量是存储数据值的容器,能够简化命令执行、脚本编写和系统管理任务,掌握变量的定义与使用,是提升命令行效率的基础,本文将详细介绍Linux命令行中不同类型变量的定义方法、作用范围及实际应用场景。
变量的基本概念与命名规则
Linux命令行变量按作用范围可分为局部变量、环境变量、只读变量、位置变量和特殊变量,变量命名需遵循以下规则:
- 只能包含字母、数字、下划线(
_
),且不能以数字开头; - 区分大小写(如
VAR
和var
是不同变量); - 避免使用保留关键字(如
if
、for
、echo
等)。
局部变量的定义与使用
局部变量仅在当前Shell会话中有效,子进程无法访问,定义方式为:
变量名=变量值
注意:等号两侧不能有空格,否则会被视为命令执行。
name="Alice" # 定义字符串变量 age=25 # 定义数值变量(本质仍是字符串) is_student=true # 定义布尔值变量(Linux中无布尔类型,用字符串表示)
变量的引用
使用$变量名
或${变量名}
引用变量,推荐后者(避免变量名与后续字符混淆):
echo $name # 输出:Alice echo ${age} # 输出:25 echo "Hello, ${name}!" # 输出:Hello, Alice!
变量的修改与删除
age=30 # 修改变量值 unset name # 删除变量(删除后无法引用)
环境变量的定义与使用
环境变量可被子进程继承,适用于跨命令、跨脚本的共享数据,定义需通过export
命令:
export 变量名=变量值 # 直接定义并导出 变量名=变量值; export 变量名 # 分两步定义
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk" # 定义Java环境变量 export PATH="$PATH:/usr/local/bin" # 将目录添加到PATH
环境变量的查看与管理
- 查看所有环境变量:
env
或printenv
- 查看特定环境变量:
echo $变量名
或printenv 变量名
- 删除环境变量:
unset 变量名
只读变量的定义
只读变量一旦定义,不可修改或删除,适用于存储固定配置(如版本号、常量),定义方式:
readonly 变量名=变量值 declare -r 变量名=变量值 # declare命令也可定义只读变量
readonly VERSION="1.0.0" VERSION="2.0" # 报错:bash: VERSION: readonly variable
位置变量与特殊变量
位置变量
用于在脚本中接收命令行参数,无需手动定义,系统自动生成:
| 变量 | 含义 | 示例(脚本test.sh
) |
|——-|————————–|————————————-|
| $0
| 脚本名称 | ./test.sh
→ $0
为./test.sh
|
| $1
~$9
| 第1~9个参数 | ./test.sh arg1 arg2
→ $1
为arg1
|
| ${10}
及以上 | 第10个及以上参数(需大括号) | ./test.sh a b c d e f g h i j
→ ${10}
为j
|
| | 参数个数 | 示例中为2(或10) |
| | 所有参数(单字符串) | 为"arg1 arg2"
|
| | 所有参数(数组形式) | 为"arg1" "arg2"
|
特殊变量
变量 | 含义 | 示例 |
---|---|---|
上一条命令的退出状态码 | ls /nonexistent; echo $? → 输出非0(错误) |
|
当前进程ID(PID) | echo $$ → 输出当前Shell的PID |
|
上一个后台进程的PID | sleep 10 &; echo $! → 输出后台进程PID |
变量定义的注意事项
- 引号使用:
- 双引号:允许变量替换(如
"Hello, $name!"
会替换$name
); - 单引号:禁止变量替换(如
'Hello, $name!'
原样输出)。
- 双引号:允许变量替换(如
- 变量作用域:
- 局部变量仅在当前Shell有效,通过
bash
进入子Shell会失效; - 环境变量需重新登录或
source
配置文件才能永久生效(如~/.bashrc
)。
- 局部变量仅在当前Shell有效,通过
- 数值运算:
- Linux变量本质是字符串,需通过或
expr
进行数值运算:sum=$((10 + 20)) # 输出30 expr 10 + 20 # 输出30(需空格)
- Linux变量本质是字符串,需通过或
变量类型对比总结
变量类型 | 定义方式 | 作用范围 | 示例 |
---|---|---|---|
局部变量 | var=value |
当前Shell会话 | count=10 |
环境变量 | export var=value |
当前Shell及子进程 | export PATH="$PATH:/new" |
只读变量 | readonly var=value |
当前Shell会话(不可变) | readonly MAX=100 |
位置变量 | 系统自动生成 | 脚本内部 | $1 (第一个参数) |
相关问答FAQs
Q1:如何让环境变量永久生效?
A:通过编辑用户配置文件(如~/.bashrc
、~/.profile
)或系统配置文件(如/etc/profile
),添加export 变量名=变量值
,然后执行source 配置文件
(如source ~/.bashrc
)使配置立即生效。
echo 'export EDITOR="vim"' >> ~/.bashrc source ~/.bashrc
Q2:局部变量和环境变量有什么区别?
A:核心区别在于作用范围和生命周期,局部变量仅在当前Shell会话中有效,子进程无法访问;环境变量通过export
导出后,可被当前Shell的所有子进程继承,在脚本中定义局部变量,脚本执行结束后变量会自动消失;而环境变量即使脚本结束,只要Shell会话未关闭,仍可使用。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/16951.html