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将变量导出为环境变量相当于 export3.3 属性删除选项表格选项说明a注意不能用于取消数组属性A注意不能用于取消关联数组属性i删除整型属性l删除小写转换属性u删除大写转换属性n删除引用属性t删除追踪属性x删除导出属性r注意不能用于删除只读属性4. 示例用法4.1 基本变量声明bash运行# 声明普通变量 declare my_varHello World echo $my_var # 输出: Hello World # 显示变量的属性 declare -p my_var # 输出: declare -- my_varHello World4.2 整型变量bash运行# 声明整型变量 declare -i num5 numnum3 echo $num # 输出: 8 # 自动进行算术运算 declare -i a6 b8 result resultab echo $result # 输出: 144.3 大小写转换属性bash运行# 自动转换为大写 declare -u upper_varhello echo $upper_var # 输出: HELLO # 自动转换为小写 declare -l lower_varWORLD echo $lower_var # 输出: world4.4 数组操作bash运行# 声明索引数组 declare -a colors(red green blue) echo ${colors[1]} # 输出: green # 声明关联数组 declare -A person person[name]John person[age]25 echo ${person[name]} # 输出: John4.5 只读变量bash运行# 声明只读变量 declare -r readonly_varCannot change readonly_varnew value # 错误: readonly_var: readonly variable # 显示所有只读变量 declare -r4.6 导出变量bash运行# 声明并导出变量 declare -x PATH/usr/local/bin:$PATH # 等同于 export PATH/usr/local/bin:$PATH4.7 函数相关操作bash运行# 定义函数 function my_func() { echo This is a function } # 显示所有函数定义 declare -f # 仅显示函数名 declare -F # 显示特定函数 declare -f my_func4.8 在函数中使用全局变量bash运行function test_func() { # 在函数内创建全局变量 declare -g global_varIm global # 局部变量函数退出后销毁 local local_varIm local } test_func echo $global_var # 输出: Im 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 var1local variable declare -i var242 # 也是局部变量 } # 函数外使用 declare declare -r CONSTANTvalue declare -a my_array(item1 item2)优先使用专用命令导出变量优先使用 export只读变量优先使用 readonly局部变量优先使用 local这样代码意图更清晰数组初始化bash运行# 推荐先声明后赋值 declare -a array array(value1 value2) # 或者一次性完成 declare -a array(value1 value2)

相关新闻

最新新闻

CUTTag与RNA-seq多组学关联分析:5大核心套路与实操指南

CUTTag与RNA-seq多组学关联分析:5大核心套路与实操指南

1. 项目概述:从单组学到多组学关联的必然之路在表观遗传学和转录组学研究领域,我们早已不满足于“单打独斗”式的数据分析。过去,我们可能分别做一次CUT&Tag实验来描绘组蛋白修饰或转录因子的结合图谱,再单独做一次RNA-seq来测…

2026/8/13 1:33:46
航空数据分析实战:从ADS-B数据到航班离港轨迹可视化

航空数据分析实战:从ADS-B数据到航班离港轨迹可视化

最近在做一个航空数据分析的小项目,需要处理大量的航班起降数据。在整理香港国际机场的离港航班信息时,我发现了一个有趣的现象:从同一个机场起飞的航班,其飞行轨迹、高度变化、速度曲线等数据背后,其实隐藏着一套复杂…

2026/8/13 1:33:46
彻底告别重复图片!AntiDupl.NET开源图片去重工具终极指南

彻底告别重复图片!AntiDupl.NET开源图片去重工具终极指南

彻底告别重复图片!AntiDupl.NET开源图片去重工具终极指南 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾因电脑中堆积如山的重复图片而烦恼&#…

2026/8/13 1:33:46
AI智能体工作流:从模糊需求到清晰开发任务的自动化拆解实践

AI智能体工作流:从模糊需求到清晰开发任务的自动化拆解实践

最近在技术社区里,一个名为“这能赢啊”的项目悄然走红。乍一看,这个标题充满了游戏化的轻松感,甚至带点调侃,很容易让人误以为又是一个昙花一现的“玩具”项目。但当你真正深入其中,会发现它瞄准了一个非常具体且高频…

2026/8/13 1:33:46
破解AMD Ryzen内存性能瓶颈:ZenTimings实战指南

破解AMD Ryzen内存性能瓶颈:ZenTimings实战指南

破解AMD Ryzen内存性能瓶颈:ZenTimings实战指南 【免费下载链接】ZenTimings 项目地址: https://gitcode.com/gh_mirrors/ze/ZenTimings 当你在AMD Ryzen平台上进行内存超频时,是否曾遇到这样的困境:BIOS中设置的参数与系统实际运行的…

2026/8/13 1:33:46
Insomnia API测试工具:5分钟掌握环境变量与自动化测试实战

Insomnia API测试工具:5分钟掌握环境变量与自动化测试实战

1. 项目概述:为什么Insomnia能成为API测试的“瑞士军刀”?如果你和我一样,每天都要和十几个甚至几十个API打交道,那你肯定懂那种在Postman、命令行curl、浏览器开发者工具之间反复横跳的烦躁。数据格式对不对?认证头加…

2026/8/13 1:28:45