【Bash百宝箱】shell内建命令之declare、typeset、local

太过爱你忘了你带给我的痛 2022-09-26 13:56 180阅读 0赞

1、declare(typeset)

在shell中,内建(builtin)命令declare与typeset用法相同,格式如下:

  1. declare [-aAfFgilnrtux] [-p] [name[=value] ...]
  2. typeset [-aAfFgilnrtux] [-p] [name[=value] ...]

declare命令用于声明变量,可以给变量设置属性。如果没有指定name,则显示相应变量的值。下面介绍declare命令各选项的含义。

“-p”:显示每个name的属性和值,不指定name时,则显示相应的所有变量的属性和值。
“-f”:用于函数,显示函数定义。
“-F”:用于函数,只显示函数名字,不显示函数定义。
“-a”:用于索引(下标)数组。
“-A”:用于关联(键值对)数组。
“-i”:用于整数,可以进行数学运算。
“-n”:用于引用变量,这个变量name的值实际上是变量value的值,value作为一个变量来使用。不能用于数组。
“-l”:对变量赋值时,值的大写字母全部转换为小写。
“-u”:对变量赋值时,值的小写字母全部转换为大写。
“-r”:声明变量只读,不能被修改,也不能unset。
“-g”:在函数中declare命令效果同内置命令local,变量的影响范围是局部的,除非使用了“-g”。
“-x”:等效于内置命令export。
“-t”:给每个name设置trace属性,对函数来说,可以继承调用shell的trap命令的DEBUG和RETURN属性,对变量则没什么意义。
对于上面的选项,可以使用加号“+”代替减号“-”,效果是关闭对应的属性,但是,“+a”和“+r”无效。

下面是declare命令在数学运算中的例子:

  1. $ a=1
  2. $ b=2
  3. $ echo $a+$b
  4. 1+2
  5. $ declare -i a=1
  6. $ declare -i b=2
  7. $ declare -i c
  8. $ c=$a+$b
  9. $ echo $c
  10. 3

2、local

在shell中,内建(builtin)命令local,格式如下:

  1. local [option] [name[=value] ...]

local命令只能用于shell函数,声明变量name为局部变量,只对当前函数或其子进程有效,选项option可以是内建命令declare可以接受的选项。

不在shell函数中使用local命令会出错:

  1. $ local
  2. bash: local: can only be used in a function

在shell函数中使用local命令:

  1. $ cat test.sh
  2. #!/bin/bash
  3. foo=global
  4. echo $foo
  5. bar()
  6. {
  7. echo $foo
  8. local foo=local
  9. echo $foo
  10. }
  11. bar
  12. echo $foo
  13. $ bash test.sh
  14. global
  15. global
  16. local
  17. global

在shell函数中不使用local命令:

  1. $ cat test.sh
  2. #!/bin/bash
  3. foo=global
  4. echo $foo
  5. bar()
  6. {
  7. echo $foo
  8. foo=local
  9. echo $foo
  10. }
  11. bar
  12. echo $foo
  13. $ bash test.sh
  14. global
  15. global
  16. local
  17. local

发表评论

表情:
评论列表 (有 0 条评论,180人围观)

还没有评论,来说两句吧...

相关阅读