Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux命令(4)——declare/typeset命令(builtin)

Linux命令(4)——declare/typeset命令(builtin)

作者头像
恋喵大鲤鱼
发布于 2018-08-03 03:19:48
发布于 2018-08-03 03:19:48
1.4K00
代码可运行
举报
文章被收录于专栏:C/C++基础C/C++基础
运行总次数:0
代码可运行

1.功能简介

declare命令(别名typeset)属shell内建命令,用于申明shell变量并设置变量属性,或查看已定义的shell变量和函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。

2.命令格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare [-aAfFilurtx] [-p] [name[=value] ...]
typeset [-aAfFilurtx] [-p] [name[=value] ...]

3.选项说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-a:申明数组变量
-A:申明关联数组,可以使用字符串作为数组索引
-f:仅显示已定义的函数
-F:不显示函数定义
-i:声明整型变量
-l:将变量值的小写字母变为小写
-u:变量值的大写字母变为大写
-r:设置只读属性
-t:设置变量跟踪属性,用于跟踪函数进行调试,对于变量没有特殊意义
-x:将指定的shell变量换成环境变量
-p:显示变量定义的方式和值
+:取消变量属性,但是+a和+r无效,无法删除数组和只读属性,可以使用unset删除数组,但是unset不能删除只读变量

4.示例

(1)定义关联数组并访问。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare -A assArray=([lucy]=beijing [yoona]=shanghai)

#读取关联数组全部内容
echo ${assArray[*]}
#或
echo ${assArray[@]}
#输出
beijing shanghai

#读取指定索引的数组值
echo ${assArray[lucy]}
#输出:
beijing

#列出数组索引列表
echo ${!assArray[*]}
#或
echo ${!assArray[@]}
#输出
yoona lucy

(2)定义只读变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare -r name1="lvlv1"
#或
typeset -r name2="lvlv2"
#或
readonly name3="lvlv3"

Shell规定,只读变量生命周期与当前Shell脚本进程相同,且不能消除只读属性和删除只读变量,除非kill当前Shell脚本进程。

(3)使用-p选项显示变量name1和name2的定义方式和当前值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare -p name1 name2 name3
#输出
declare -r name1="lvlv1"
declare -r name2="lvlv2"
declare -r name3="lvlv3"

(4)使用-x选项将shell变量转换为临时环境变量,供当前Shell会话的其他shell进程使用,退出当前Shell会话则失效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare -x name1;

(5)显示所有shell环境变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare -x

(6)使用+x选项取消变量为环境变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
delcare +x name1

(7)申明整型变量,赋值浮点型数值将报错。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare -i integer=666

参考文献

[1][Shell]数组与关联数组 [2]Linux指令范例速查手册.北京:科学出版社,2008:178-183

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年03月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker 容器 OOM:从资源监控到JVM调优的实战记录
人们眼中的天才之所以卓越非凡,并非天资超人一等而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。———— 马尔科姆·格拉德威尔
Xxtaoaooo
2025/09/07
3620
Docker 容器 OOM:从资源监控到JVM调优的实战记录
Matrix-iOS 内存监控
FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀。对用户而言,表现跟crash一样。Facebook早在2015年8月提出FOOM检测办法,大致原理是排除各种情况后,剩余的情况是FOOM,具体链接:https://code.facebook.com/posts/1146930688654547/reducing-fooms-in-the-facebook-ios-app/。
微信终端开发团队
2019/05/16
8.2K0
五万字 | 深入理解Linux内存管理
作者简介: 程磊,一线码农,在某手机公司担任系统开发工程师,日常喜欢研究内核基本原理。 1.1 内存管理的意义 1.2 原始内存管理 1.3 分段内存管理 1.4 分页内存管理 1.5 内存管理的目标 1.6 Linux内存管理体系 2.1 物理内存节点 2.2 物理内存区域 2.3 物理内存页面 2.4 物理内存模型 2.5 三级区划关系 3.1 Buddy System 3.1.1 伙伴系统的内存来源 3.1.2 伙伴系统的管理数据结构 3.1.3 伙伴系统的算法逻辑 3.1.4 伙伴系统的接口 3.1
刘盼
2022/08/26
4.8K0
五万字 | 深入理解Linux内存管理
iOS 性能优化实践:头条抖音如何实现 OOM 崩溃率下降50%+
OOM 其实是Out Of Memory的简称,指的是在 iOS 设备上当前应用因为内存占用过高而被操作系统强制终止,在用户侧的感知就是 App 一瞬间的闪退,与普通的 Crash 没有明显差异。但是当我们在调试阶段遇到这种崩溃的时候,从设备设置->隐私->分析与改进中是找不到普通类型的崩溃日志,只能够找到Jetsam开头的日志,这种形式的日志其实就是 OOM 崩溃之后系统生成的一种专门反映内存异常问题的日志。那么下一个问题就来了,什么是Jetsam?
ios-lan
2020/10/21
4.7K0
iOS 客户端动图优化实践
GIF 和 Animated WebP 是互联网上最主流的动图格式, 但是在 iOS 开发中, 原生的 UIImage 并不直接支持 GIF 以及 Animated WebP 的展示, 因此有了各种优秀的第三方开源方案, 例如 SDWebImage 以及 YYImage 等. 这篇文章将以 QQ 音乐 iOS 端优化动图的实践为基础, 来介绍不同方案的思路以及优劣, 并给出优化的方案. 1. 端内动图展示的问题以及优化结果 长期以来, 部分机型浏览 Q 音的图文流时很容易闪退, 端内其他业务也存在不少动图相
QQ音乐技术团队
2023/05/12
6.6K4
iOS 客户端动图优化实践
深入了解Linux OOM Killer:一次可怕的内核事件
The OOM Killer 是内核中的一个进程,当系统出现严重内存不足时,它就会启用自己的算法去选择某一个进程并杀掉. 之所以会发生这种情况,是因为Linux内核在给某个进程分配内存时,会比进程申请的内存多分配一些. 这是为了保证进程在真正使用的时候有足够的内存,因为进程在申请内存后并不一定立即使用,当真正使用的时候,可能部分内存已经被回收了。
嵌入式Linux内核
2023/08/08
6.6K0
深入了解Linux OOM Killer:一次可怕的内核事件
从 Linux 进程调度到 Android 线程管理
起因 最近我们的 APM 上线了应用卡顿的性能检测,我们使用的是和 BlockCanary 同样的方案,通过 Looper Printer 去监控应用的卡顿。在收集到线上数据以后,发现一个比较怪异的现象,大量的卡顿的情况下,当前执行线程(主线程)的执行时间其实并不长,主线程只执行了几毫秒,但是却卡顿1s甚至更长的时间。很明显这个时候是由于主线程没有抢占到CPU导致,为了搞清楚为什么主线程没有抢到CPU,我把 Android 线程调度仔细撸了一遍。 Linux 进程与Android 线程 基础知识 进程是
用户1907613
2018/07/20
3.2K0
Linux 内存调优之如何限制进程、系统级别内存资源
今天和小伙伴分享一些Linux 内存限制相关知识,主要涉及如何配置以及什么情况下需要配置,我们知道内存属于不可压缩资源,当没有那么多的物理内存可以映射,进程都无法启动,所以为了公平,亦或是考虑部分进程 Qos 级别,一般情况下会对进程进行内存限制,即保证机器上的多个进程不会因为业务对基础资源的弹性要求,相互影响,比如类似FTP进程的内存泄露问题影响到核心业务服务触发 OOM ,甚至直接被OOM killer 掉。
山河已无恙
2025/08/06
4320
Linux 内存调优之如何限制进程、系统级别内存资源
Redis源码解析——内存管理
        在《Redis源码解析——源码工程结构》一文中,我们介绍了Redis可能会根据环境或用户指定选择不同的内存管理库。在linux系统中,Redis默认使用jemalloc库。当然用户可以指定使用tcmalloc或者libc的原生内存管理库。本文介绍的内容是在这些库的基础上,Redis封装的功能。(转载请指明出于breaksoftware的csdn博客)
方亮
2019/01/16
1.1K0
YYAsyncLayer 源码剖析:异步绘制
性能优化一直是 iOS 开发中的一个重头戏,其中界面流畅度的优化是至关重要的,因为它直接关系到用户体验。从最熟悉和简单的 UIKit 框架到 CoreAnimation、CoreGraphics、CoreText 甚至是 OpenGL,优化似乎是无穷无尽,也非常考验开发者的水平。
波儿菜
2018/08/02
1.1K0
iOS微信内存监控
本文介绍如何实现离线化的内存监控工具,用于 App 上线后发现内存问题。
WeTest质量开放平台团队
2018/03/01
3.7K0
iOS微信内存监控
Android进程保活-自“裁”或者耍流氓
本篇文章是后台杀死系列的最后一篇,主要探讨一下进程的保活,Android本身设计的时候是非常善良的,它希望进程在不可见或者其他一些场景下APP要懂得主动释放,可是Android低估了”贪婪“,尤其是很多国产APP,只希望索取来提高自己的性能,不管其他APP或者系统的死活,导致了很严重的资源浪费,这也是Android被iOS诟病的最大原因。本文的保活手段也分两种:遵纪守法的进程保活与流氓手段换来的进程保活。
看书的小蜗牛
2018/06/29
2.4K0
Android进程保活-自“裁”或者耍流氓
CVE-2020-9964:iOS中的信息泄露漏洞分析
2020年09月17日凌晨,苹果终于给所有用户推送了iOS14正式版,并同时发布了iOS 14.0的安全内容更新。阅读该公告后,你将会看到列表中的一个漏洞CVE-2020-9964,这是一个存在于IOSurfaceAccelerator中的安全漏洞。苹果将这个漏洞描述为:“本地用户将能够利用该漏洞读取内核内存数据,这是一个内存初始化问题。”那么在这篇文章中,我们将跟大家介绍有关该漏洞的详细信息。
FB客服
2020/10/27
8060
CVE-2020-9964:iOS中的信息泄露漏洞分析
iOS-底层原理36:内存优化(一) 野指针探测
下面是Mach异常 与 UNIX信号 的转换关系代码,来自 xnu 中的 bsd/uxkern/ux_exception.c
conanma
2021/10/28
2.6K0
centos7 cgroup oom触发访问ext4文件系统卡死
centos7 3.10.0-1160.62.1.el7.x86_64内核版本已修复该问题,CentOS7受影响内核版本 3.10.0-862.el7 - 3.10.0-1160.59.1.el7
cdh
2022/04/15
3.1K3
iOS 测试 | iOS 自动化性能采集
​今天小编跟大家分享一篇来自学院内部学员的技术分享,本文主要介绍了作者在进行 iOS 自动化性能采集的一些经验,希望对大家在进行 iOS 自动化测试时有一些启发。
霍格沃兹测试开发
2020/07/15
2.6K0
iOS 测试 | iOS 自动化性能采集
Android 进程回收之LowMemoryKiller原理篇
在前面的文章Android进程保活一文中,对于LowMemoryKiller的概念做了简单的提及。LowMemoryKiller简称低内存杀死机制。简单来说,LowMemoryKiller(低内存杀手)是Andorid基于oomKiller原理所扩展的一个多层次oomKiller,OOMkiller(Out Of Memory Killer)是在Linux系统无法分配新内存的时候,选择性杀掉进程,到oom的时候,系统可能已经不太稳定,而LowMemoryKiller是一种根据内存阈值级别触发的内存回收的机制
xiangzhihong
2018/01/26
3.9K0
iOS微信内存监控
目前iOS主流的内存监控工具是Instruments的Allocations,但只能用于开发阶段。本文介绍如何实现离线化的内存监控工具,用于App上线后发现内存问题。
WeTest质量开放平台团队
2018/10/29
2K0
oom killer
Linux系统内存管理中存在着一个称之为OOM killer(Out-Of-Memory killer)的机制,该机制主要用于内存监控,监控进程的内存使用量,当系统的内存耗尽时,其将根据算法选择性地kill了部分进程。本文分析的内存溢出保护机制,也就是OOM killer机制了。
233333
2019/05/25
2K0
Android lowmemorykiller分析
Android底层还是基于Linux,在Linux中低内存是会有oom killer去杀掉一些进程去释放内存,而Android中的lowmemorykiller就是在此基础上做了一些调整来的。因为手机上的内存毕竟比较有限,而Android中APP在不使用之后并不是马上被杀掉,虽然上层ActivityManagerService中也有很多关于进程的调度以及杀进程的手段,但是毕竟还需要考虑手机剩余内存的实际情况,
233333
2020/04/01
1.5K0
Android lowmemorykiller分析
相关推荐
Docker 容器 OOM:从资源监控到JVM调优的实战记录
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验