在Linux系统中,赋值是变量操作的基础,无论是脚本编写、命令行交互还是系统配置,都离不开对变量的赋值操作,Linux中的赋值操作涉及多种场景,包括普通变量、环境变量、数组、命令替换结果等,且不同场景下的语法规则和注意事项各有不同,本文将详细讲解Linux中各类赋值操作的语法、示例及常见问题,帮助读者全面掌握变量赋值的核心要点。

普通变量赋值:局部变量与基本语法
普通变量(局部变量)是Linux中最基础的变量类型,仅在当前Shell会话中有效,不会传递给子进程,其赋值语法为:
变量名=变量值
关键规则:
- 等号两边不能有空格,这是新手最易犯的错误(如
name = "Alice"会报错)。 - 变量名需以字母或下划线开头,可包含字母、数字、下划线,区分大小写(如
Name和name是不同变量)。 - 变量值若包含空格或特殊字符,需用双引号(支持变量替换)或单引号(原样输出)包裹,
name="Alice Smith" # 双引号支持变量替换 greeting='Hello, $name!' # 单引号原样输出,结果为Hello, $name!
- 引用变量时,需在变量名前加,或用包裹(推荐后者,避免变量名与后续字符混淆):
echo $name # 输出Alice Smith echo ${name} # 输出Alice Smith echo "Hello, ${name}!" # 输出Hello, Alice Smith!
环境变量赋值:跨进程共享变量
环境变量与普通变量的核心区别在于其作用域:环境变量会传递给当前Shell的子进程,适用于需要跨脚本或跨命令共享的场景,赋值方式有两种:
直接赋值并导出
export 变量名=变量值
export PATH=$PATH:/usr/local/bin # 将新路径添加到PATH环境变量 export EDITOR=vim # 设置默认编辑器为vim
先定义变量再导出
变量名=变量值 export 变量名
JAVA_HOME=/usr/lib/jvm/java-11-openjdk export JAVA_HOME
验证环境变量:
- 使用
env或printenv命令查看所有环境变量:env | grep PATH # 查看PATH环境变量
- 使用
echo $变量名验证:echo $JAVA_HOME # 输出/usr/lib/jvm/java-11-openjdk
数组赋值:存储多个值
数组是Linux中存储多个值的复合数据类型,分为索引数组(下标为数字)和关联数组(下标为字符串)。
索引数组(默认类型)
语法:
- 直接初始化:
数组名=(值1 值2 值3) - 按下标赋值:
数组名[下标]=值 - 动态添加:
数组名+=("新值")
示例:

# 初始化索引数组
fruits=("apple" "banana" "cherry")
echo ${fruits[0]} # 输出apple(下标从0开始)
# 按下标赋值
fruits[3]="orange" # 添加元素,下标为3
echo ${fruits[3]} # 输出orange
# 动态添加
fruits+=("grape") # 在末尾添加元素,下标为4
echo ${fruits[@]} # 输出所有元素:apple banana cherry orange grape
关联数组(需先声明)
语法:
declare -A 数组名 # 声明为关联数组 数组名["键"]=值
示例:
declare -A person # 声明关联数组
person["name"]="Bob"
person["age"]=30
person["city"]="New York"
echo ${person["name"]} # 输出Bob
echo ${person[@]} # 输出所有值:Bob 30 New York
命令替换赋值:将命令结果存入变量
命令替换是将命令的执行结果赋值给变量的操作,Linux支持两种语法:
反引号`command`(旧语法,不推荐嵌套)
current_date=`date +%Y-%m-%d` echo "Today is $current_date" # 输出类似:Today is 2023-10-01
语法(推荐,支持嵌套和复杂命令)
# 基本用法 files_count=$(ls -l | wc -l) echo "Total files: $files_count" # 嵌套命令 echo "Kernel version: $(uname -r)" # 输出内核版本,如:5.15.0-76-generic
算术赋值:数值计算与运算
Linux中支持数值变量的算术运算,常用方式有:
$((表达式))(推荐,无需额外命令)
a=10 b=3 c=$((a + b)) # 加法,结果13 d=$((a * b)) # 乘法,结果30 e=$((a / b)) # 除法,整数结果3(需bc支持小数) f=$((a % b)) # 取余,结果1 # 自增自减 ((a++)) # a自增为11 ((b--)) # b自减为2
let命令(支持运算符)
let "sum = a + b" # 注意等号两边可加空格 echo $sum # 输出13 let "product *= 2" # product乘以2(需先定义product)
expr命令(老旧,不推荐,需处理空格和转义)
sum=$(expr a + b) # 运算符两边必须有空格 echo $sum # 输出13
文件描述符赋值:重定向与文件操作
文件描述符是Linux中I/O操作的抽象,可通过exec命令将文件描述符与文件绑定,实现自定义输入/输出流。
语法:
exec 文件描述符> 文件名 # 写入(覆盖) exec 文件描述符>> 文件名 # 写入(追加) exec 文件描述符< 文件名 # 读取
示例:

# 将文件描述符3指向output.txt(写入) exec 3> output.txt echo "This is a test" >&3 # 通过描述符3写入文件 exec 3>&- # 关闭描述符3 # 将文件描述符4指向input.txt(读取) exec 4< input.txt cat <&4 # 通过描述符4读取文件内容 exec 4<&- # 关闭描述符4
变量属性设置:declare与typeset
declare(或typeset)命令可设置变量的属性,如只读、整数、数组等,常用选项如下(可通过表格总结):
| 选项 | 作用 | 示例 |
|---|---|---|
-i |
声明为整数 | declare -i num=10+20 # num=30(自动计算) |
-r |
声明为只读变量 | declare -r readonly_var="cannot change" # 修改会报错 |
-x |
声明为环境变量 | declare -x export_var="value" # 等同于export export_var=value |
-a |
声明为索引数组 | declare -a fruits=("apple" "banana") |
-A |
声明为关联数组 | declare -A person |
-u |
转换为大写 | declare -u name="alice" # name=ALICE |
示例:
# 声明只读变量 declare -r MAX_SIZE=100 MAX_SIZE=200 # 报错:MAX_SIZE: readonly variable # 声明整数变量 declare -i count=5 count=count*3 # 结果15(自动算术运算)
注意事项
- 变量名与等号:严格禁止两边有空格,否则会被解释为命令(如
name = "Alice"会被拆分为name、、"Alice"三个命令,报错command not found)。 - 引号使用:双引号支持变量替换和转义(如
n换行),单引号原样输出所有内容(包括变量和特殊字符)。 - 未定义变量:未赋值的变量默认为空字符串,但可通过
set -u(或set -o nounset)启用严格模式,使未定义变量报错。 - 特殊字符转义:若变量值包含、、等特殊字符,需用反斜杠
转义,如:message="The price is $10" echo "$message" # 输出The price is $10
相关问答FAQs
Q1:Linux变量赋值时,等号两边如果加了空格会怎样?
A:等号两边加空格会导致Shell将表达式拆分为多个命令,从而报错。
name = "Alice" # 错误写法 # Shell解析为:执行命令name,命令=,参数"Alice",报错"=: command not found"
正确写法应为:name="Alice"(等号两边无空格)。
Q2:如何查看当前Shell中所有已定义的变量(包括普通变量和环境变量)?
A:可通过以下命令查看:
set:查看所有变量(包括函数、局部变量等),输出较全。env或printenv:仅查看环境变量(已通过export导出的变量)。declare:查看变量及其属性(如declare -p显示所有变量定义)。
示例:
set | grep name # 查看所有包含"name"的变量 env | grep PATH # 查看PATH环境变量 declare -p # 显示所有变量的定义和属性
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/35919.html