readonly命令是Bash shell的内置命令,用于将变量或函数设置为只读(readonly)状态。只读变量和函数不能被修改、重新赋值或删除,这样可以保护重要的配置和数据不被意外修改。
| 选项 | 描述 | 示例 |
|---|---|---|
| (无选项) | 设置变量为只读 | readonly VAR |
| -p | 列出所有只读变量(默认行为) | readonly -p |
| -f | 操作函数而非变量 | readonly -f func_name |
| -a | 操作索引数组(Bash 4.3+) | readonly -a array |
| -A | 操作关联数组(Bash 4.3+) | readonly -A array |
1. 设置变量为只读:
2. 定义时直接设置为只读:
3. 查看只读变量:
1. 设置函数为只读:
2. 查看只读函数:
3. 定义时直接设置为只读函数:
1. 设置索引数组为只读:
2. 设置关联数组为只读:
1. 保护配置常量:
2. 保护数学常量:
3. 保护系统路径:
4. 保护重要函数:
1. 脚本头部定义只读常量:
2. 配置文件常量:
3. 只读参数验证:
bash命令启动完全新的shell进程,不会继承只读属性:1. 保护整个环境:
2. 函数库保护:
3. 只读变量的导出:
1. 脚本中使用只读常量:
2. 保护配置变量:
3. 谨慎使用只读:
| 命令 | 描述 | 与readonly的区别 |
|---|---|---|
| declare -r | 设置只读变量 | 功能相同,语法不同,declare可以设置更多属性 |
| typeset -r | 设置只读变量(兼容Korn shell) | 在Bash中,typeset是declare的别名 |
| local | 设置局部变量 | 只在函数内有效,但不一定是只读的 |
| export | 导出变量到子进程 | 可以导出的变量也可以是只读的 |
| unset | 删除变量 | 不能删除只读变量 |
| 用途 | 命令 | 说明 |
|---|---|---|
| 设置只读变量 | readonly VAR=value |
定义并设置只读变量 |
| 设置已存在的变量为只读 | readonly VAR |
将现有变量设为只读 |
| 设置只读函数 | readonly -f func_name |
保护函数不被重定义 |
| 列出只读变量 | readonly -p |
显示所有只读变量及其值 |
| 列出只读函数 | readonly -f |
显示所有只读函数的定义 |
| 设置只读数组 | readonly -a array_name |
设置索引数组为只读(Bash 4.3+) |
| 设置只读关联数组 | readonly -A array_name |
设置关联数组为只读(Bash 4.3+) |
| 在脚本中保护配置 | readonly $(compgen -v | grep '^[A-Z_]') |
将所有大写变量设为只读(谨慎使用) |