4960

25 分钟

#Bash 的 declare 命令

declare [OPTIONS] [NAME=VALUE]...

功能

定义变量(和函数),或设置变量的属性。

类型

Bash 内置命令。

参数

  • OPTION 选项:
    • -f - 只查看或操作函数
    • -F - 仅显示函数名
    • -g - 在 shell 函数中使用时创建全局变量
    • -I - 如果创建局部变量,则继承先前作用域中同名变量的属性和值
    • -p - 显示每个名称的属性和值
    • -a - 使 NAME 具有“索引数组”属性
    • -A - 使 NAME 具有“关联数组”属性
    • -i - 使 NAME 具有“整数”属性
    • -l - 使 NAME 在赋值时自动将值换为小写
    • -n - 使 NAME 为变量的引用
    • -r - 使 NAME 只读
    • -t - 使 NAME 具有“trace”属性
    • -u - 使 NAME 在赋值时自动将值换为大写
    • -x - 导出(exportNAME
    • +a - 移除 NAME 的“索引数组”属性
    • +A - 移除 NAME 的“关联数组”属性
    • +i - 移除 NAME 的“整数”属性
    • +l - 移除 NAME 在赋值时自动转小写的属性
    • +n - 移除 NAME 引用属性
    • +r - 移除 NAME 的只读属性
    • +t - 移除 NAME 的“trace”属性
    • +u - 移除 NAME 在赋值时自动转大写的属性
    • +x - 移除 NAME 的导出(export)属性(删除环境变量)
  • NAME - 变量名
  • VALUE - 变量的值

#示例

查看变量

$ declare           # 查看所有变量
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:globskipdots:histappend:interactive_comments:login_shell:patsub_replacement:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
...

查看函数

$ declare -fF       # 查看函数且只显示函数名
declare -f __expand_tilde_by_ref
declare -f __get_cword_at_cursor_by_ref
declare -f __git_eread
declare -f __git_ps1
declare -f __git_ps1_colorize_gitstring
...

定义引用变量

$ real_var="hello"              # 定义普通变量
$ declare -n ref_var=real_var   # 定义引用变量
$ echo $ref_var
hello

定义只读变量

$ declare -r PI=3.1415926       # 定义只读变量
$ echo $PI
3.1415926
$ PI=3                          # 赋值会报错
-bash: PI: readonly variable

定义整数

$ declare -i num=10             # 定义整数
$ num+=5                        # 整数可以进行运算
$ echo $num
15

自动转换大小写

$ declare -u upper              # 自动转大小
$ upper=abc
$ echo $upper
ABC
$ declare -l lower              # 自动转小写
$ lower=XYZ
$ echo $lower
xyz

定义数组

$ declare -a arr=(apple banana cherry)  # 定义数组
$ echo "${arr[0]}"                      # apple
apple
$ echo "${arr[@]}"                      # 全部元素
apple banana cherry

定义关联数组(map/dict)

$ declare -A user                       # 定义关联数组
$ user[name]="Alice"                    # 元素赋值
$ user[age]=20
$ echo "${user[name]}"
Alice
$ echo "${user[age]}"
20
$ $ echo "${user[@]}"                   # 全部元素
20 Alice

环境变量

$ declare +x MY_ENV                     # 将 MY_ENV 从环境变量中移除
$ declare -x MY_ENV                     # 将 MY_ENV 加入环境变量
$ declare -x PATH="$PATH:/my/bin"       # 相当于 export

#相关命令

命令说明
unset删除变量

#手册

更新: 2026/4/15

作者: PlanC

创建: 2026/4/2