只读变量通过readonly命令实现运行时保护,用于定义不可修改的常量以增强脚本健壮性;支持先赋值后锁定或一步定义并设只读,不可重新赋值、unset或解除只读,适用于配置常量等固定值。

在 Linux Shell 脚本中,只读变量用于定义不可修改的常量,防止意外赋值或覆盖,增强脚本健壮性。它不是语法关键字,而是通过 readonly 命令实现的运行时保护机制。
定义只读变量的两种常用方式
方式一:先赋值再设为只读
my_port=8080readonly my_port
方式二:一步完成定义与设只读(推荐)
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
readonly my_host="localhost"-
readonly -f my_func(若要设函数为只读)
只读变量的行为特点
一旦设置为只读,以下操作都会失败并报错(如 sh: my_port: is read only):
- 重新赋值:
my_port=9000 - 用
unset删除:unset my_port - 试图用
readonly -n解除只读 —— 此选项在标准 bash/sh 中不存在或无效,不可依赖
查看和验证只读变量
快速确认哪些变量已被锁定:
-
readonly(不带参数)→ 列出所有只读变量及值 -
readonly -p→ 以可重载格式输出(适合调试或导出) -
declare -r是等效写法,例如declare -r api_timeout=30
实用建议
只读变量适合存放配置常量、路径、版本号等固定值:
- 脚本开头集中定义:
readonly APP_NAME="monitor-agent" LOG_DIR="/var/log/app" - 配合双引号使用更安全:
readonly CONF_PATH="/etc/${APP_NAME}/config.conf"(变量展开发生在设只读前) - 避免在循环或条件分支中动态设只读,易引发逻辑混乱










