shell@变量
1. 什么是 Shell 变量
Shell 变量是用来存储数据的容器,可以在脚本或 Shell 会话中保存和操作值。它们通常是键值对的形式,比如 name=value,不需要提前声明类型(Shell 是弱类型语言)。
变量类型
- shell变量 (仅仅在shell中有效)
- 局部变量 (x=y 函数局部变量 local x=y,仅仅在函数内部有效)
- 只读变量(变量不能被修改 readonly x=y)
- 环境变量 (export x=y, 其他shell也可以使用变量x)
2. 定义变量
- 语法:
变量名=值 - 规则:
- 变量名区分大小写,通常用大写字母表示环境变量,小写或驼峰式用于局部变量。
- 变量名不能以数字开头,不能包含空格或特殊字符(除了下划线
_)。(字母/下划线开头) - 等号两边不能有空格。
1 | name="Alice" |
3. 访问变量
- 用
$变量名或${变量名}获取变量的值。 ${变量名}在变量名后紧跟其他字符时很有用,避免歧义。
1 | echo $name # 输出: Alice |
4. 变量类型
Shell 中的变量没有严格的类型,但根据用途可以分为:
局部变量:
- 只在当前脚本或 Shell 会话中有效。
- 示例:
temp="hello"
环境变量:
通过
export导出,可被子进程继承。1
export PATH="/usr/local/bin:$PATH"
只读变量:
用
readonly或declare -r定义,不能修改。1
2readonly PI=3.14
PI=3 # 报错
特殊变量:
- Shell 内置的变量,具有特定含义:
$0:脚本名称。$1,$2, …:脚本的第 1、2 个参数。$#:参数个数。$@或$*:所有参数。$$:当前脚本的进程 ID。$?:上一个命令的退出状态(0 表示成功)。
- Shell 内置的变量,具有特定含义:
1 | echo "脚本名: $0" |
5. 变量赋值与默认值
- 默认值:如果变量未定义,可以用
${变量名:-默认值}。 - 赋值默认值:用
${变量名:=默认值},如果未定义则赋值。 - 删除变量(x=y; unset x; echo $x)
1 | echo ${var:-"default"} # 如果 var 未定义,输出 "default",但 var 仍未赋值 |
6. 变量的作用域
- 局部变量:默认只在当前 Shell 或脚本中有效。
- 全局变量:用
export导出后,子进程可以访问。 - 函数内局部变量:用
local关键字限制作用域。
1 | my_func() { |
7. 字符串操作
Shell 变量常用于处理字符串,支持一些基本操作:
- 拼接:直接将变量和字符串放在一起。
1
2name="Alice"
echo "$name Smith" # 输出: Alice Smith - 长度:用 `$