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)

相关新闻

深入了解佛山网站建设明细报价逻辑与服务标准

深入了解佛山网站建设明细报价逻辑与服务标准

做网站和做房子其实是一个道理,很多人以为把钢筋水泥堆起来就能住人,结果住进去才发现漏水、隔音差、格局还反人类。做网站也一样,很多老板一开始只看最后那个漂亮的界面,却忽略了地基打得好不好,管线排得顺不顺。作为深耕佛山本地多年的网络技术人员,我见过太多因为前期…

2026/10/10 12:03:33 阅读更多 →
3步彻底清理Windows系统优化工具:让你的“此电脑“恢复整洁

3步彻底清理Windows系统优化工具:让你的“此电脑“恢复整洁

3步彻底清理Windows系统优化工具:让你的"此电脑"恢复整洁 【免费下载链接】MyComputerManager 管理“此电脑”里删不掉的流氓“快捷方式”(包括侧边栏),同时可自己添加这类“快捷方式” 项目地址: https://gitcode.co…

2026/9/29 15:39:40 阅读更多 →
嵌入式面试总结(六)——现代处理器架构

嵌入式面试总结(六)——现代处理器架构

一、引言在嵌入式系统开发与面试中,处理器架构是必须掌握的核心知识。它不仅决定了系统的性能、功耗和成本,更是理解底层硬件工作原理、进行系统优化和解决复杂问题的基石。无论是面对资深工程师的深度追问,还是应对校招笔试中的基础概念题&a…

2026/10/2 2:38:28 阅读更多 →

最新新闻

文华软件期货指标公式大全富途牛牛

文华软件期货指标公式大全富途牛牛

HH1:(EMA(CLOSE,12) - EMA(CLOSE,26))*100; LL1:EMA(HH1,9); DRAWTEXT(CROSS(HH1,LL1),90,众),COLORWHITE; DRAWTEXT(CROSS(LL1,HH1),90,4),COLORYELLOW; DRAWTEXT(CROSS(HH1,LL1),60,龙),COLORWHITE; DRAWTEXT(CROSS(LL1,HH1),60,8),COLORYELLOW; DRAWTEXT(CROSS(HH1,LL1),70,…

2026/10/14 11:06:16 阅读更多 →
一台一只手就能托起的四足机器人,凭什么拿到 4.6k 星?

一台一只手就能托起的四足机器人,凭什么拿到 4.6k 星?

Sesame 开源项目深度拆解:从硬件、固件到动画工具、仿真与强化学习生态以及边界 项目作者:Dorian Todd(doriantodd.com/sesame) 仓库数据获取时间:2026-10-12 00:36(北京时间) 开篇:…

2026/10/14 11:06:16 阅读更多 →
通达信期权指标文华软件指标公式

通达信期权指标文华软件指标公式

HH1:(EMA(CLOSE,12) - EMA(CLOSE,26))*100; LL1:EMA(HH1,9); DRAWTEXT(CROSS(HH1,LL1),90,众),COLORWHITE; DRAWTEXT(CROSS(LL1,HH1),90,4),COLORCYAN; DRAWTEXT(CROSS(HH1,LL1),60,龙),COLORWHITE; DRAWTEXT(CROSS(LL1,HH1),60,8),COLORCYAN; DRAWTEXT(CROSS(HH1,LL1),70,育),…

2026/10/14 11:06:16 阅读更多 →
Django实战:用GitHub API构建用户展示网站

Django实战:用GitHub API构建用户展示网站

1. 项目概述:为什么一个 GitHub 用户展示网站值得从 Django 开始练手“Django 实战 | 搭一个 GitHub 用户展示网站 01”——这个标题乍看像教程合集里的普通一节,但背后藏着一条非常扎实的 Web 开发入门路径。我带过不少刚转行的开发者,也帮某…

2026/10/14 11:06:16 阅读更多 →
AI做PPT实战:对话改稿生成18页傅里叶课件

AI做PPT实战:对话改稿生成18页傅里叶课件

1. 从一份18页傅里叶课件说起:AI做PPT到底进化到了什么程度前阵子帮一位在高校做助教的朋友处理课件,他需要把一份关于傅里叶变换的讲义整理成18页左右的PPT,用于本科信号与系统课程的复习课。他原本的做法是:先在文档里写好内容&…

2026/10/14 11:06:16 阅读更多 →
第2章:Linux 基础,pwd 命令

第2章:Linux 基础,pwd 命令

专栏导航 上一篇:第2章:Linux 基础,date 命令 回到目录 下一篇:第2章:Linux 基础,whoami 命令 本节前言 对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真…

2026/10/14 11:05:15 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →