linux Shell 变量不声明类型、无需初始化,但赋值时等号两侧不可有空格,引用需加 $ 符号,双引号支持变量展开而单引号不展开;数值运算需用 $((…))等显式算术上下文;字符串 操作支持长度 ${#str}、截取 ${str:0:3};普通变量仅当前进程有效,export 后成为子进程可见的 环境变量。

Linux Shell 中变量是脚本的基础,它不声明类型、不需初始化,但使用时必须注意赋值语法和引用方式。变量名区分大小写,不能以数字开头,推荐用小写字母加下划线。关键点在于:赋值时等号两侧不能有空格;引用变量必须加 $ 符号;字符串中双引号允许变量展开,单引号则原样输出。
变量定义与引用的常见写法
Shell 变量赋值非常简洁,但空格是大忌:
-
name="Alice"✅ 正确(等号紧贴) -
name = "Alice"❌ 错误(会被解释为执行命令name) -
echo $name或echo ${name}都可取值,后者在拼接时更安全,比如${name}123不会误读成变量name123 - 未定义变量默认为空,
echo $undefined输出空白,不会报错
数值运算的三种常用方式
Shell 默认把所有变量当字符串处理,做数学计算需显式启用算术上下文:
-
expr $a + $b—— 传统方式,操作符前后必须有空格,且只支持整数 -
$((a + b))—— 推荐方式,支持变量直接写、括号嵌套、位运算等,如$((2**3))得 8 -
let "c = a * 2 + 1"—— 类 C 语法,适合多步赋值,但注意引号内空格不影响解析
注意:$(()) 中变量名可省略 $,但外部变量仍需带 $ 引用,例如 a=5; echo $((a+3))。
字符串操作与简单判断技巧
变量常用于路径拼接、条件检查或截取子串:
- 拼接:
path="/home"; user="alice"; full="$path/$user" - 长度:
${#str}返回字符串字符数,如str="hello"; echo ${#str}输出 5 - 截取:
${str:0:3}表示从第 0 位起取 3 个字符(类似 切片) - 判断是否为空:
[-z "$var" ]为空返回真,[-n "$var"]非空返回真,记得加双引号防空格出错
环境变量 与局部变量 的区别
普通变量只在当前 Shell 进程有效;用 export 声明后才成为环境变量,子进程可见:
-
MY_VAR="test"→ 当前脚本可用,bash -c 'echo $MY_VAR'输出空 -
export MY_VAR="test"→ 子 Shell 也能读到 -
unset MY_VAR可删除变量,包括已 export 的 - 内置环境变量如
$HOME、$PATH全局可用,修改PATH要小心追加:export PATH="$PATH:/my/bin"
基本上就这些。变量看着简单,但空格、引号、$ 符号、作用域 这四点最容易出错。写脚本时多打 echo 调试,比猜快得多。