文章目录

  • 一、命令介绍
  • 二、命令格式
  • 三、命令选项
  • 四、命令示例
    • (一)声明变量并赋值
    • (二)将变量设置为环境变量
    • (三)将变量设置为只读,不可修改
    • (四)将变量声明为整数并进行计算
    • (五)显示变量的属性和值
    • (六)显示所有的变量
    • (七)显示所有的环境变量
    • (八)声明数组变量
    • (九)显示所有自定义函数的名称
    • (十)显示所有自定义函数,包括名称和函数体
    • (十一)显示指定函数的声明定义内容
    • (十二)声明一个整数型的变量,并给变量赋值

一、命令介绍

declare 命令是 bash 的一个内建命令,它可以用来声明 shell 变量、显示 shell 变量的值以及设置 shell 变量的属性。declare 声明定义的变量仅能在当前 shell 环境中起作用,切换 shell 环境后将无效。

declare 的功能与 typeset 命令的功能是相同的,不过 typeset 已经被弃用了,建议使用 declare 代替。

二、命令格式

declare [-aAfFgilnrtux] [-p] [var[=val] ...]

注:var 是变量名称,val 是变量的值

三、命令选项

选项 说明
-f 显示所有自定义函数,包括名称和函数体
-F 显示所有自定义函数名称
-g 在 Shell 函数内部创建全局变量
-p 显示指定变量的属性和值,当使用此选项时,其他的选项将被忽略
-a 声明数组变量
-A 声明变量为关联数组(支持索引下标为字符串)
-i 声明整数型变量。这样变量后面就可以跟着算术表达式,表达式的结果只能是整数。如果表达式求值失败或者不是整数,就设置为 0
-l 给变量赋值时转为小写
-u 给变量赋值时转为大写
-n 使变量 var 成为指向一个以其值为名称的变量的引用
-r 将变量 var 声明为只读变量。只读变量不允许修改,也不允许删除。等价于 readonly name
-t 使变量 var 带有 trace(追踪)属性
-x 将变量 var 导出,作用与 export 一样,将变量 var 设置成环境变量,这样在随后的脚本和程序中可以使用。等价于 export name[=value]

特别说明:

  1. + 代替 - 会关闭指定选项。例如,- 可用来指定变量的属性,+ 则是取消变量所设的属性。
  2. 带有整数属性的变量在赋值时将使用算术估值(见 let 命令)。
  3. 在函数中使用时,declare 使 var 成为本地变量,和 local 命令一致。-g 选项抑制此行为。

四、命令示例

(一)声明变量并赋值

方式一:declare var=value

[root@htlwk0001host ~]# declare sum=200+300
[root@htlwk0001host ~]# echo $sum
500

注:shell 自动判断表达式的数据类型,若都是整数型则计算结果,再赋值给变量,所以最后输出结果 500

方式二:typeset var=value 等价于 declare var=value

方式三:var=value

[root@htlwk0001host ~]# sum=200+300
[root@htlwk0001host ~]# echo $sum
200+300

注:此处并没有像我们想像中那样会得到结 500,而是 200+300,这是由于它是文字类型的变量属性。

(二)将变量设置为环境变量

将变量 var 设置成环境变量,这样在随后的脚本和程序中可以使用。

方式一:

[root@htlwk0001host ~]# declare -x var
[root@htlwk0001host ~]# declare -x var=value # 将变量 var 设置成环境变量,并赋值为 value

方式二:

[root@htlwk0001host ~]# typeset -x var

方式三:

[root@htlwk0001host ~]# export var

(三)将变量设置为只读,不可修改

[root@linux ~]# declare -r sum
[root@linux ~]# sum=apple
-bash: sum: readonly variable
[root@linux ~]# unset sum
-bash: unset: sum: cannot unset: readonly variable

注:声明为只读变量之后,不能修改该变量的属性,也不能修改变量的值,也不能删除该变量,所以,在声明变量的时候,应该慎用,避免有去无回。另外,你在命令行中敲 readonly,你会发现有很多只读变量,当然这些变量也是不能修改或删除的。

(四)将变量声明为整数并进行计算

[root@linux ~]# declare -i m n ret  # 将多个变量声明为整数
[root@linux ~]# m=10
[root@linux ~]# n=30
[root@linux ~]# ret=$m+$n
[root@linux ~]# echo $ret
40

(五)显示变量的属性和值

其实就是现实变量的声明定义语句,如下所示:

[c.biancheng.net]$ declare -r n=10
[c.biancheng.net]$ declare -p n
declare -r n="10"

(六)显示所有的变量

[root@htlwk0001host ~]# declare -p
declare -- BASH="/bin/bash"
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -- BASHRCSOURCED="Y"
declare -A BASH_ALIASES=()
declare -a BASH_ARGC=()
declare -a BASH_ARGV=()
declare -A BASH_CMDS=()

(七)显示所有的环境变量

[root@htlwk0001host ~]# declare -x
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/0/bus"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="htlwk0001host"
declare -x JAVA_HOME="/usr/java/latest"

(八)声明数组变量

将变量 var 声明为数组变量。但这没有必要。所有变量都不必显式定义就可以用作数组。事实上,在某种意义上,似乎所有变量都是数组,而且赋值给没有下标的变量与赋值给"var[0]"相同。

[root@jfht ~]#declare -a names # 声明一个数组变量叫names
[root@jfht ~]#names=Jack # 给数组赋值,没有具体指定下标,默认赋值给下标为0的位置,即等价于names[0]=Jack
[root@jfht ~]#echo ${names[0]} # 输出数组names下标为0的元素的值
Jack
[root@jfht ~]#names[1]=Bone  # 给数组names下标为1的位置赋值Bone
[root@jfht ~]#echo ${names[1]}
Bone
[root@jfht ~]#echo ${names} # 没有指定下标,输出第一个元素的值。直接引用names,相当于引用names[0]
Jack
[root@jfht ~]#echo ${names[*]} # '*'代表数组所有的元素
Jack Bone
[root@jfht ~]#echo ${#names} # 输出数组第一个元素的长度
4
[root@jfht ~]#echo ${#names[*]} # 输出数组的长度,即数组的元素个数
2
[root@jfht ~]#echo ${names[@]} # '@'与'*'类似
Jack Bone
[root@jfht ~]#echo ${#names[@]} # 输出数组的长度,即数组的元素个数
2
[root@jfht ~]#declare -p names # 查看变量的属性和值,即变量names的声明定义内容
declare -a names='([0]="Jack" [1]="Bone")'
[root@jfht ~]#

(九)显示所有自定义函数的名称

[root@htlwk0001host ~]# declare -F
declare -f __expand_tilde_by_ref
declare -f __get_cword_at_cursor_by_ref
declare -f __load_completion
declare -f __ltrim_colon_completions
declare -f __parse_options
declare -f __parse_vdo_options
...

(十)显示所有自定义函数,包括名称和函数体

[root@htlwk0001host ~]# declare -f
__expand_tilde_by_ref ()
{ if [[ ${!1} == \~* ]]; thenif [[ ${!1} == */* ]]; theneval $1="${!1/%\/*}"/'${!1#*/}';elseeval $1="${!1}";fi;fi
}
__get_cword_at_cursor_by_ref ()
...

(十一)显示指定函数的声明定义内容

[root@htlwk0001host ~]# declare -f __expand_tilde_by_ref
__expand_tilde_by_ref ()
{ if [[ ${!1} == \~* ]]; thenif [[ ${!1} == */* ]]; theneval $1="${!1/%\/*}"/'${!1#*/}';elseeval $1="${!1}";fi;fi
}
[root@htlwk0001host ~]#

(十二)声明一个整数型的变量,并给变量赋值

[root@htlwk0001host ~]# declare -i var
[root@htlwk0001host ~]# var=6/3
[root@htlwk0001host ~]# declare -p var
declare -i var="2"
[root@htlwk0001host ~]# echo $var
2

给整数型的变量赋予非整数型的值,结果变成0,如下所示:

[root@htlwk0001host ~]# var=error
[root@htlwk0001host ~]# echo $var
0
[root@htlwk0001host ~]#

如果变量被声明成整数,把一个小数(浮点数)赋值给它时,也是不行的。因为bash并不内置对浮点数的支持,如下所示:

[root@htlwk0001host ~]# var=3.14
-bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")

取消变量 var 的整数类型属性,如下命令:

[root@htlwk0001host ~]# declare +i var
[root@htlwk0001host ~]# var=6/3
[root@htlwk0001host ~]# echo $var
6/3

因为变量 var 不是整型变量,所以不会自动对除法的表达式求值。可以采用下面两个方式:

[root@htlwk0001host ~]# x=$[6/3]
[root@htlwk0001host ~]# echo $x
2
[root@htlwk0001host ~]# x=$((6/3))
[root@htlwk0001host ~]# echo $x
2

Linux 命令之 declare -- 声明或显示 shell 变量相关推荐

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

    原文地址:https://www.cnblogs.com/wfwenchao/p/6139039.html [TOC] Linux中 set.env.declare.export显示shell变量的区 ...

  2. Linux 命令之 unset -- 删除指定的shell变量或函数

    文章目录 一.命令介绍 二.选项参数 三.命令示例 (一)删除指定的环境变量 一.命令介绍 unset 为 shell 内建指令,用于删除已定义的shell变量(包括环境变量)和shell函数.uns ...

  3. linux set命令例子,学习一个 Linux 命令:declare/typeset 命令

    原标题:学习一个 Linux 命令:declare/typeset 命令 1 功能简介 declare(别名 typeset)属 Shell 内建命令,用于申明 Shell 变量并设置变量属性,或查看 ...

  4. linux脚本 set env,linux 中 set,env,export,declare显示shell变量的区别

    shell变量包括两种变量 1.本shell私有的变量:通过赋值语句定义好的变量,可以通过如下方法定义shell变量 A1="1234" delcare A2="2345 ...

  5. Linux 命令之 typeset -- 声明 shell 变量,设置变量的属性

    文章目录 一.命令介绍 二.常用选项 三.命令示例 (1)定义关联数组并访问 一.命令介绍 typeset 命令是 bash 的内建命令,是命令 declare 的别名,两者是完全一样的,用来声明 s ...

  6. linux 中 set,env,export,declare显示shell变量的区别

    shell变量包括两种变量 1.本shell私有的变量:通过赋值语句定义好的变量,可以通过如下方法定义shell变量 A1="1234" delcare A2="2345 ...

  7. set,env和export命令显示shell变量其区别,与环境变量扫盲(一)

    种类: ♦ set     :  用来显示本地变量,显示当前shell的变量,包括当前用户的变量 ♦ env    :  用来显示环境变量,显示当前用户的变量. ♦ export:  用来显示和设置环 ...

  8. linux命令行下全路径显示,显示命令及文件路径用什么命令?Linux命令知识有什么...

    查看Linux系统路径用什么命令?显示命令及其相关文件全路径的命令有哪些?快速定位文件路径用什么命令?Linux运维学习中,命令是非常重要的.每年学习Linux运维技术的人们越来越多,对于初学者来说, ...

  9. Linux运行脚本忽略警告,ShellCheck - 显示Shell脚本的警告和建议的工具

    ShellCheck是一个静态分析工具,显示有关bash / sh shell脚本中的错误代码的警告和建议. 它可以通过以下几种方式使用:通过在网络编辑器(Ace - 用JavaScript编写的独立 ...

最新文章

  1. java将图片放进mysql中_在java代码中怎么从服务器上把图片拿来放到数据库里
  2. 皮一皮:这这这..太真实了...
  3. java加密方式有哪些_面完平安JAVA,他们说了这些
  4. js只能输入数字[价格等]
  5. python 将excel文件转换为txt文件_python利用pandas将excel文件转换为txt文件的方法
  6. 201506230818_《JavaScript权威指南(第六版)——callee和caller、对象属性用作实参、自定义函数属性》(P175-180)...
  7. 第二轮冲刺-Runner站立会议08
  8. sqlite4java下载_使用sqlite4java的UnsatisfiedLinkError,没有sqlite4java-osx-amd64
  9. css绘画三角形,实现一些图形
  10. 计算机组成原理:二进制与十进制互转
  11. 浅析变长数组(VLA)和动态数组
  12. mysql sql查询当天_sql查询当天数据
  13. flash 倒计时功能
  14. 电磁场与电磁波-场论基础
  15. 如何进行敌我识别(IFF)应用中的二次监视雷达(SSR)的模块化产线测试
  16. 求轮廓最大内接圆(后续篇)---距离变换法
  17. 【动态规划】数字三角形c语言
  18. jadx学习记录01
  19. 3D游戏编程与设计作业六
  20. Python获取win7下的CPU温度

热门文章

  1. Java与Python:哪一个最适合您? [信息图]
  2. 侬娜·杰尔_杰尔·地狱
  3. servlet异步_关于Servlet和异步Servlet
  4. rest api_REST API的演变
  5. 只读副本和Spring Data第1部分:配置数据库
  6. javafx_JavaFX技巧4:总结
  7. 分布式事务 camel_使用Camel在Amazon上构建分布式工作流应用程序
  8. www.how2j.com_HOW-TO:快速开始使用Spring 4.0,以构建简单的REST-Like API(演练)
  9. 在Jersey测试中模拟SecurityContext
  10. Java更快地对基元数组进行排序?