Bash内置命令——declare

本文详细介绍了Bash shell中的declare命令,它用于声明变量、初始化、设置变量属性及显示变量信息。通过`-p`可以查看变量的值和属性,`-f`和`-F`用于显示和列出函数,`-g`控制变量的作用域,`-a`和`-A`声明数组,`-i`、`-r`、`-l`、`-u`改变变量属性,`-n`创建变量引用,`-t`和`-x`分别用于变量追踪和导出。当使用declare时,需避免触发错误条件,如非法选项、给只读变量赋值等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

declare

declare [-aAfFgilnrtux] [-p] [name[=value]]

既可以声明并初始化变量name,也可以为已存在的变量赋值或设置变量的属性,还可以用来显示变量。

$ declare foo=bar abc=123
$ echo ${foo} ${abc}
bar 123

没有给name时,显示所有变量。

$ declare
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
BASH_CMDS=()
...
  • -p 不仅显示变量的值,还显示变量的属性
$ declare -p BASH
declare -- BASH="/bin/bash"
$ declare -p
declare -- BASH="/bin/bash"
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
declare -i BASHPID
declare -A BASH_ALIASES=()
declare -a BASH_ARGC=([0]="0")
...
$ declare foo=bar abc=123
$ declare -p foo abc
declare -- foo="bar"
declare -- abc="123"
  • -f 显示shell函数,包括函数的定义
$ declare -f quote
quote ()
{
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}
  • -F 只显示函数的名字和属性
$ declare -F quote
quote
  • -g 赋予变量全局属性;+g 关闭该属性
    在函数中使用declare时,如果不使用-g选项,声明的都是局部变量,其作用如同local命令
$ foo ()
> {
>     declare -g bar
>     declare abc
> }
$ foo
$ declare -p bar
declare -- bar
$ declare -p abc
-bash: declare: abc: not found
  • -a 声明索引数组变量
  • -A 声明关联数组变量
  • -i 赋予变量integer属性;+i 关闭该属性
$ declare -i var=1+2
$ echo $var
3
$ declare abc=1+2
$ echo $abc
1+2
  • -r 赋予变量只读属性
$ declare -r foo
$ echo $foo
123
$ foo=456
-bash: foo: readonly variable
  • -l 赋给变量的值,所有大写字符都将转换为小写。 大写属性被禁用。+l 关闭该属性
$ declare -l abc=ABCD
$ echo $abc
abcd
$ declare +l abc
$ abc=ABCdef
$ echo $abc
ABCdef
  • -u 赋给变量的值,所有小写字符都将转换为大写。 小写属性被禁用。+u 关闭该属性
$ declare -u abc=abcd
$ echo $abc
ABCD
$ declare +u abc
$ abc=ABCdef
$ echo $abc
ABCdef
  • -n 给变量提供nameref属性,使其成为对另一个变量的引用。
$ foo=abc
$ declare -n bar=foo
$ echo $bar
abc
$ bar=123
$ echo $foo
123

nameref属性不能用于数组变量。

  • -t 赋予变量trace属性。trace属性对变量没有特殊含义。
  • -x export变量

如下情况,declare命令的返回值(return status)不为0:

  • 非法的option
  • 使用‘-f foo=bar’定义函数
  • 为只读变量赋值
  • 没有使用复合赋值语法为数组变量赋值
  • 声明非法的shell变量名
  • 试图关闭只读变量的只读属性
  • 试图关闭数组变量的数组属性
  • 用-f显示不存在的函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值