当前位置: 首页 > news >正文

Bash 脚本进阶:declare 命令完整详解(变量属性、数组、只读实战)

1. 命令简介

declare 是 Bash 内建命令,用于声明、设置或显示变量的值和属性。它可以创建具有特定属性(如只读、整型、数组等)的变量,也可以显示现有变量的属性和值。该命令在脚本编程中常用于精确控制变量的行为。

2. 语法格式

bash

运行

declare [-aAfFgilnrtux] [-p] [name[=value] ...]

3. 常用选项及说明

3.1 显示控制选项

表格

选项说明
-f将操作限制为函数名及函数定义
-F仅显示函数名(调试时可附加行号和源文件)
-g在 Shell 函数中使用时创建全局变量;其他情况下忽略
-p显示指定变量的属性和值(未指定变量名时显示所有变量)

3.2 属性设置选项

表格

选项说明
-a将变量声明为索引数组
-A将变量声明为关联数组(Bash 4.0+)
-i将变量声明为整型,赋值时自动进行算术运算
-l赋值时自动将值转换为小写
-u赋值时自动将值转换为大写
-n为变量设置引用属性(指向另一个变量)
-r将变量声明为只读(不可修改和删除)
-t为变量设置追踪属性(用于函数)
-x将变量导出为环境变量(相当于 export)

3.3 属性删除选项

表格

选项说明
+a注意:不能用于取消数组属性
+A注意:不能用于取消关联数组属性
+i删除整型属性
+l删除小写转换属性
+u删除大写转换属性
+n删除引用属性
+t删除追踪属性
+x删除导出属性
+r注意:不能用于删除只读属性

4. 示例用法

4.1 基本变量声明

bash

运行

# 声明普通变量 declare my_var="Hello World" echo $my_var # 输出: Hello World # 显示变量的属性 declare -p my_var # 输出: declare -- my_var="Hello World"

4.2 整型变量

bash

运行

# 声明整型变量 declare -i num=5 num=num+3 echo $num # 输出: 8 # 自动进行算术运算 declare -i a=6 b=8 result result=a+b echo $result # 输出: 14

4.3 大小写转换属性

bash

运行

# 自动转换为大写 declare -u upper_var="hello" echo $upper_var # 输出: HELLO # 自动转换为小写 declare -l lower_var="WORLD" echo $lower_var # 输出: world

4.4 数组操作

bash

运行

# 声明索引数组 declare -a colors=("red" "green" "blue") echo ${colors[1]} # 输出: green # 声明关联数组 declare -A person person["name"]="John" person["age"]=25 echo ${person["name"]} # 输出: John

4.5 只读变量

bash

运行

# 声明只读变量 declare -r readonly_var="Cannot change" readonly_var="new value" # 错误: readonly_var: readonly variable # 显示所有只读变量 declare -r

4.6 导出变量

bash

运行

# 声明并导出变量 declare -x PATH="/usr/local/bin:$PATH" # 等同于 export PATH="/usr/local/bin:$PATH"

4.7 函数相关操作

bash

运行

# 定义函数 function my_func() { echo "This is a function" } # 显示所有函数定义 declare -f # 仅显示函数名 declare -F # 显示特定函数 declare -f my_func

4.8 在函数中使用全局变量

bash

运行

function test_func() { # 在函数内创建全局变量 declare -g global_var="I'm global" # 局部变量(函数退出后销毁) local local_var="I'm local" } test_func echo $global_var # 输出: I'm global echo $local_var # 输出: (空)

5. 注意事项

5.1 重要限制

不可逆的属性:

  • 数组属性(-a 或 -A)一旦设置,无法用 +a 或 +A 取消
  • 只读属性(-r)一旦设置,无法删除,变量将永久存在

作用域注意:

  • 在函数内部使用 declare(不带 -g)创建的变量默认是局部变量
  • 在函数外部使用 declare 创建的是全局变量

属性冲突:

  • 某些属性不能同时设置,如 -l(小写)和 -u(大写)
  • 数组和普通变量属性互斥

5.2 最佳实践建议

明确作用域:

bash

运行

# 函数内使用 local function my_function() { local var1="local variable" declare -i var2=42 # 也是局部变量 } # 函数外使用 declare declare -r CONSTANT="value" declare -a my_array=("item1" "item2")

优先使用专用命令:

  • 导出变量:优先使用 export
  • 只读变量:优先使用 readonly
  • 局部变量:优先使用 local

这样代码意图更清晰

数组初始化:

bash

运行

# 推荐:先声明后赋值 declare -a array array=("value1" "value2") # 或者一次性完成 declare -a array=("value1" "value2")
http://www.jsqmd.com/news/1381775/

相关文章:

  • 工厂搬家公司收费标准详解,合理定价更透明!上海大众搬家有限公司 - 热点品牌推荐
  • 2026 年现阶段大理正规的中边支柱加工厂怎么联系,别再看错了!支撑跨境贸易半边天的,原来不是你以为的那些,而是这根被忽略的中边支柱。-升瑞矿山机械 - 行业严选官
  • 微信小店改价系统:C++级指纹伪装深度,连系统调用层都查不出
  • 高通跃龙IQ-9100工业平台的开发经验分享(3): weights-packing-CLI与PythonAPI对比
  • 一天一道算法题(8):原地哈希的思路与实现解析
  • 2026 年现阶段,沙坡头到聊城二手车物流公司哪家强,花几千块运二手车上牌,竟有人因此亏了半辆新车钱? - 实业推荐官
  • 龙岗网站建设怎么做好公司推广?资深运营揭秘本地企业数字化转型的真实套路
  • 如何让网站建设更高效?深度解析站内搜索在品牌官网中的核心价值与落地指南
  • 网站建设挣钱么:揭秘个人与工作室如何在红海中杀出一条血路并实现月入过万的真实路径
  • 2026年全国地上通风笼选购 靠谱厂家推荐指南 - 起跑123
  • 如何用Winhance中文版免费优化Windows系统:从卡顿到流畅的完整指南
  • 高通跃龙IQ-9100工业平台的开发经验分享(4): llm-重复输出与prompt工程解决方案
  • 2026年太原地区少儿美术培训辅导班选择参考指南 - 起跑123
  • 批量生图跑到一半挂了怎么办?给 nano-banana2 的生图API 任务加断点续跑
  • 2026 年至今,高坪正规的电液动推杆企业哪个好,用了它,车间里的重型物料推送效率竟提升了三倍? - 企业信息推荐-2
  • Linux 内核日志诊断:dmesg 命令完整详解(硬件故障排查实战)
  • 2026年宁波选购马尔轮廓仪 哪家好你可以多了解下这里 - 起跑123
  • Python 如何做文本对比?超全实战教程(精准比对+相似度+可视化差异)
  • 地铁采风111
  • 2026年集运系统大比拼,哪家能在众多竞品中脱颖而出?
  • 2026年选高速内镶贴条式滴灌带生产线正规厂商新润滴灌设备 - 热点品牌推荐
  • 2026年新版参考重庆市渐进老花镜怎么选?围绕容易忽略的风险和核对要点、这些问题要提前避开与区县服务要点全面解析 - 小校长
  • Visual C++运行库修复终极指南:一站式解决Windows应用程序启动问题的完整方案
  • 2026年买车去哪挑新能源汽车车行有哪些成都同展车多多新能源二手车 - 热点品牌推荐
  • 市场低代码管理平台智能管理
  • 2026年太原艺考生美术培训相关机构选择参考指南 - 起跑123
  • llama.cpp 本地部署完全指南:从安装到 OpenAI 兼容 API 服务
  • 高通跃龙IQ-9075平台的开发记录(1): 边缘农业AI助手的端到端部署
  • 2026年朝阳刑事律师事务所联系方式查询指南 北京英淇律师事务所(朝阳服务中心) - 热点品牌推荐
  • 嵌入式面试总结(六)——现代处理器架构