declare 和 typeset 都是 Shell 内建命令,它们的用法相同,都用来设置变量的属性。不过 typeset 已经被弃用了,建议使用 declare 代替。

declare 命令的用法如下所示:declare [+/-] [aAfFgilprtux] [变量名=变量值]

其中,-表示设置属性,+表示取消属性aAfFgilprtux都是具体的选项,它们的含义如下表所示:

选项
含义
-f [name] 列出之前由用户在脚本中定义的函数名称和函数体。
-F [name] 仅列出自定义函数名称。
-g name 在 Shell 函数内部创建全局变量。
-p [name] 显示指定变量的属性和值。
-a name 声明变量为普通数组。
-A name 声明变量为关联数组(支持索引下标为字符串)。
-i name  将变量定义为整数型。
-r name[=value]  将变量定义为只读(不可修改和删除),等价于 readonly name。
-x name[=value] 将变量设置为环境变量,等价于 export name[=value]。
 
举栗
知识点
-i 将变量定义为整数型
对比测试
举栗
结果
普通定义变量
  1. a=3
  2. b=4
  3. echo $a+$b

3+4

普通定义变量
  1. a=3
  2. b=4
  3. c=$a+$b
  4. echo $c
3+4
declare -i定义变量
  1. declare -i a b
  2. a=3
  3. b=4
  4. echo $a+$b
3+4
declare -i定义变量
  1. declare -i a b c
  2. a=3
  3. b=4
  4. c=$a+$b
  5. echo $c
7
 

-r 将变量定义为只读

(不可修改和删除)

declare -r n=10

echo $n———>10

n=30———>报错

-bash: m: 只读变量

普通变量可以通过unset删除,但是只读变量不可修改不可删除
-p 显示指定变量的属性和值

roaddb@standalone:~$ declare -r r=10

roaddb@standalone:~$ declare -p r

declare -r r="10"

roaddb@standalone:~$ a=5

roaddb@standalone:~$ declare -p a

declare -- a="5"

-x 将变量设置为环境变量

roaddb@standalone:~$ export env_var=test1

roaddb@standalone:~$ declare -x env_var2=test2

roaddb@standalone:~$ env|grep env_var*

env_var2=test2

env_var=test1

roaddb@standalone:~$ declare -p env_var2

declare -x env_var2="test2"

roaddb@standalone:~$ declare -p env_var

declare -x env_var="test1"

1.使用export或 declare -x可以设置环境变量

2.env可以查看所有的环境变量

-f 列出之前由用户在脚本中定义的函数名称和函数体    
-F 仅列出自定义函数名称    
-g 在 Shell 函数内部创建全局变量  

1.全局变量的知识点

1)在 Shell 中定义的变量,默认就是全局变量

2)全局变量的作用范围是当前的 Shell 进程,而不仅仅是当前的 Shell 脚本文件

-a 声明变量为普通数组

roaddb@standalone:~$ arr1=('a' 'b' 'c')

roaddb@standalone:~$ echo ${arr1[*]}

a b c

roaddb@standalone:~$ declare -p arr1

declare -a arr1='([0]="a" [1]="b" [2]="c")'

roaddb@standalone:~$ declare -a arr2=('aa' 'bb' 'cc')

roaddb@standalone:~$ echo ${arr2[*]}

aa bb cc

roaddb@standalone:~$ declare -p arr2

declare -a arr2='([0]="aa" [1]="bb" [2]="cc")'

使用arr1=('a' 'b' 'c')或declare -a arr2=('a' 'b' 'c')的方式创建数组,其效果是一样的
-A 声明变量为关联数组(支持索引下标为字符串)

roaddb@standalone:~$ declare -A arr3=(['aa']='bb' ['cc']='dd' ['ee']='ff')

roaddb@standalone:~$ declare -p arr3

declare -A arr3='([aa]="bb" [ee]="ff" [cc]="dd" )'

 

6-x3 declare和typeset命令:设置变量属性的更多相关文章

  1. Linux命令(6/28)——declare/typeset命令

    declare 与 typeset 命令是bash的内建命令,两者是完全一样的,用来声明shell变量,设置变量的属性. declare命令(别名typeset)属shell内建命令,用于申明shel ...

  2. 『忘了再学』Shell基础 — 19、使用declare命令声明变量类型

    目录 1.declare命令介绍 2.声明数组变量类型 3.声明变量为环境变量 4.声明只读属性 5.补充: 1.declare命令介绍 Shell中所有变量的默认类型是字符串类型,如果你需要进行特殊 ...

  3. readonly&&declare&&unset &&export&&env环境变量

    readonly命令用于定义只读shell变量和shell函数.readonly命令的选项-p可以输出显示系统中所有定义的只读变量. 选项 -f:定义只读函数: -a:定义只读数组变量: -p:显示系 ...

  4. Linux set、env、declare、export显示shell变量的区别

    目录 Linux中 set.env.declare.export显示shell变量的区别 1. shell局部变量 2. 用户的环境变量 显示shell变量 declare 命令 export 命令 ...

  5. Scala命令设置JVM参数的规则

    Scala下设置JVM参数简单分析 Scala 启动shell脚本,简化后的scala REPL 启动命令大致如下所示: java -Xmx256M -Xms32M \-Xbootclasspath/ ...

  6. WLST 命令和变量

    下列部分将详细描述 WLST 命令和变量.主题包括:  WSLT 命令类别概述  浏览命令  控制命令  部署命令  诊断命令  编辑命令  信息命令  生命周期命令  节点管理器命令  树命令  W ...

  7. locale命令设置语言环境

    locale命令设置语言环境 在Linux中通过locale来设置程序运行的不同语言环境,locale由 ANSI C提供支持.locale的命名规则为_.,如zh_CN.GBK,zh代表中文, CN ...

  8. KETTLE设置变量

    一.kettle变量类型 kettle变量分为: 1.环境变量 通过 set variables组件设置变量,范围可以是:JVM变量.作业变量.父作业变量.根作业变量.使用时通过${var}或 %%v ...

  9. Linux下使用locale命令设置语言环境

    locale命令设置语言环境 在Linux中通过locale来设置程序运行的不同语言环境,locale由 ANSI C提供支持.locale的命名规则为_.,如zh_CN.GBK,zh代表中文, CN ...

随机推荐

  1. shell基础之变量及表达式

    本节内容 1. shell变量简介 2. 定义变量 3. 使用变量 4. 修改变量的值 5. 单引号和双引号的区别 6. 将命令的结果赋值给变量 7. 删除变量 8. 变量类型 9. 特殊变量列表 1 ...

  2. STM32独立看门狗(IWDG)

    造成程序跑飞,只是程序的正常运行状态被打断而进入死循环,从而使单片机控制的系统无法正常工作.看门狗就是一种专门用于检测单片机程序运行状态的硬件结构. STM32内部自带了两个看门狗,独立看门狗(IWD ...

  3. mysql数据库-备份方式简介与规范

    目录 1 应对场景: 2. 备份方式分类 2.1 按备份数据类型划分 2.2 按侵入程度划分 2.3 按备份方式划分 3 备份注意要点 4 还原要点 4.1 定期还原测试,验证备份可用性 4.2 还原 ...

  4. 「 洛谷 」P2151 [SDOI2009]HH去散步

    小兔的话 欢迎大家在评论区留言哦~ HH去散步 题目限制 内存限制:125.00MB 时间限制:1.00s 标准输入 标准输出 题目知识点 动态规划 \(dp\) 矩阵 矩阵乘法 矩阵加速 矩阵快速幂 ...

  5. Jmeter(五十) - 从入门到精通高级篇 - jmeter 之模拟弱网进行测试(详解教程)

    1.简介 在实际工作中,网络带宽一定不会是持续稳定的保持某一个值,而是有高有低.因此为了测试场景和实际能够无限的接近,所以我们需要模拟一下来达到效果.还有就是在实际的测试工作中,会因为业务需要,有时限 ...

  6. 适用于AMD ROC GPU的Numba概述

    适用于AMD ROC GPU的Numba概述 Numba通过按照HSA执行模型将Python代码的受限子集直接编译到HSA内核和设备功能中,从而支持AMD ROC GPU编程.用Numba编写的内核似 ...

  7. Vitis-AI集成

    Vitis-AI集成 Vitis-AI是Xilinx的开发堆栈,用于在Xilinx平台(包括边端设备和Alveo卡)上进行硬件加速的AI推理.它由优化的IP,工具,库,模型和示例设计组成.设计时考虑到 ...

  8. 车联网V-2X智能汽车驾驶

    车联网V-2X智能汽车驾驶 早期的功能互联汽车无法满足全球车主针对不同应用和定制移动服务的各种需求.这导致较低的客户续订率,较高的建造和运营成本以及较低的组装率.通常,在没有统一平台的情况下,不同的车 ...

  9. CVPR2020:视觉导航的神经拓扑SLAM

    CVPR2020:视觉导航的神经拓扑SLAM Neural Topological SLAM for Visual Navigation 论文地址: http://openaccess.thecvf. ...

  10. python应用_异常处理

    我们把可能发生错误的语句放在try模块里,用except来处理异常. 参考学习链接: https://www.cnblogs.com/OliverQin/p/12222619.html 异常处理的完整 ...