6-x3 declare和typeset命令:设置变量属性

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" )'

 
原文地址:https://www.cnblogs.com/mianbaoshu/p/12069541.html