Chinaunix首页 | 论坛 | 博客
  • 博客访问: 300558
  • 博文数量: 84
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 890
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 16:46
文章分类

全部博文(84)

文章存档

2017年(2)

2016年(4)

2015年(78)

我的朋友

分类: LINUX

2015-06-09 09:04:21

命令描述
declare或typeset内建命令(它们是完全相同的)可以用来限定(或宣告变量的属性)变量的属性.这是在某些编程语言中使用的定义类型不严格的方式。命令declare是bash版本2之后才有的。命令typeset也可以在ksh脚本中运行。
declare为shell指令,在第一种语法中可用来声明变量并设置变量的属性([rix]即为变量的属性只读,整数运算,环境变量),在第二种语法中可用来显示shell函数。若不加上任何参数,则会显示全部shell变量与函数(与执行set指令的效果相同)。
无论是环境变量还是自定义变量,在使用、变量=变量内容、export 变量=变量内容、亦或是 declare -x 变量=变量内容,在退出系统后,再次登陆时,所设置的变量将消失.

在默认的情况下,bash对于变量有几个基本的定义:
1、变量类型默认为“字符串”就像sum=100+200+300,所以若不指定变量类型,者100+200+300为一个“字符串”而不是计算式
2、bash环境中的数值运算,默认最多仅能到达整数类型,所以1/3结果是零(只能做整数运算)。


命令语法
declare [+/-][rxi][变量名称=设置值]或declare -f

参数
+/-:-可用来指定变量的属性,+则是取消变量所设置的属性。
-f:仅显示函数。
-a:将后面的variable定义为数组(array)
-r:将变量设置为只读readonly,该变量不可被更改内容,也不能unset 
-x:指定的变量会成为环境变量,可供shell以外的程序来使用,用法与export一样,就是将后面的variable变成环境变量
-i:[设置值]可以是数值,字符串或运算式,将后面的variable定义为整数数字(integer)
-p:可以单独列出变量的属性类型


1、参数-i的使用

点击(此处)折叠或打开

  1. [root@RHEL6 ~]# sum=100+300+50
  2. [root@RHEL6 ~]# echo $sum
  3. 100+300+50 //怎么没有帮助我们计算?因为这是文字类型的变量属性(默认是文字类型的变量属性,加-i属性为整数运行类型,如果不能整数运算结果将是0)
  4. [root@RHEL6 ~]# declare -i sum=100+300+50
  5. [root@RHEL6 ~]# echo $sum
  6. 450
  7. [root@RHEL6 ~]# declare -i sum=100+300-50
  8. [root@RHEL6 ~]# echo $sum
  9. 350
  10. [root@RHEL6 ~]# declare -i sum=(100+300)/50
  11. [root@RHEL6 ~]# echo $sum
  12. 8
  13. [root@RHEL6 ~]#
  14. [root@RHEL6 ~]# declare -i sum=1/3
  15. [root@RHEL6 ~]# echo $sum
  16. 0
  17. [root@RHEL6 ~]#
因为变量sum不是整数变量,所以不会自动对表达式求值。也可以采用下面两个方式,运算数值结果,只是没有变量属性,属性值均为“空”

点击(此处)折叠或打开

  1. [root@RHEL6 ~]# unset sum
  2. [root@RHEL6 ~]# declare -p sum
  3. -bash: declare: sum: not found
  4. [root@RHEL6 ~]#
  5. [root@RHEL6 ~]# sum=$[100+300+50]
  6. [root@RHEL6 ~]# declare -p sum
  7. declare -- sum="450"
  8. [root@RHEL6 ~]# sum=$((100+300+50))
  9. [root@RHEL6 ~]# declare -p sum
  10. declare -- sum="450"
  11. [root@RHEL6 ~]#

2、参数-x的使用

点击(此处)折叠或打开

  1. declare -x HISTSIZE="1000" 命令与 export HISTSIZE="1000" 是相同的,设置变量并将变量转换为环境变量
  2. [root@RHEL6 ~]# HISTSIZE=1000 //设置自定义变量HISTSIZE变量的内容为1000
  3. [root@RHEL6 ~]# set | grep HISTSIZE //查找HISTSIZE变量
  4. HISTSIZE=1000
  5. [root@RHEL6 ~]# declare -x HISTSIZE="1001" //使用declare -x设置环境变量HISTSIZE的内容为1001,其实是覆盖了自定义变量HISTSIZE,并且HISTSIZE也同时变成了环境变量
  6. [root@RHEL6 ~]# set | grep HISTSIZE //查询HISTSIZE变量内容的变化
  7. HISTSIZE=1001
  8. _=HISTSIZE=1001
  9. [root@RHEL6 ~]# export HISTSIZE="1002" //使用export 设置环境变量HISTSIZE的内容为1002,其实是覆盖了由declare -x设置的变量HISTSIZE。
  10. [root@RHEL6 ~]# set | grep HISTSIZE //查询HISTSZE变量内容的变化
  11. HISTSIZE=1002
  12. _=HISTSIZE
  13. [root@RHEL6 ~]#

点击(此处)折叠或打开

  1. [root@RHEL6 ~]# env | grep HISTSIZE //查看HISTSIZE环境变量、系统默认是1000
  2. HISTSIZE=1000 //变量值为1000
  3. [root@RHEL6 ~]# unset HISTSIZE //取消变量
  4. [root@RHEL6 ~]# env | grep HISTSIZE //再次查询HISTSIZE变量,发现已经没有了
  5. [root@RHEL6 ~]# HISTSIZE="1000" //重新设置变量HISTSIZE的内容为1000
  6. [root@RHEL6 ~]# env | grep HISTSIZE //在次查询HISTSIZE变量,发现env中并没有HISTSIZE变量,原来默认情况下HISTSIZE="1000" 只是设置为自定义变量,而非环境变量,当然使用env查看环境变量的命令也就无法查到了。
  7. [root@RHEL6 ~]# set | grep HISTSIZE //在set中查找HISTSIZE变量,发现以存在,原因是set命令是查找环境变量和自定义变量的命令
  8. HISTSIZE=1000
  9. [root@RHEL6 ~]# export HISTSIZE //将HISTSIZE变量使用export转化为环境变量
  10. [root@RHEL6 ~]# env | grep HISTSIZE //再次查找,发现查找到内容
  11. HISTSIZE=1000

3、参数-x -i合用

点击(此处)折叠或打开

  1. [root@RHEL6 ~]# declare -ix sum=100+200+300 //设置sum为环境变量并且可以是数值运算
  2. [root@RHEL6 ~]# echo $sum //显示变量结果
  3. 600
  4. [root@RHEL6 ~]# env | grep sum //在环境变量下查找sum变量
  5. sum=600
  6. [root@RHEL6 ~]#

4、参数-r的使用(readonly属性)

点击(此处)折叠或打开

  1. [root@RHEL6 ~]# set | grep sum //查询是否有sum变量,发现没有,那么我们设置
  2. [root@RHEL6 ~]# declare -xi sum=100+200+300 //设置sum为环境变量并且可以是数值运算
  3. [root@RHEL6 ~]# echo $sum //显示变量结果
  4. 600
  5. [root@RHEL6 ~]# env | grep sum //同样在环境变量中也能查看到sum变量
  6. sum=600
  7. [root@RHEL6 ~]# declare -r sum //设置sum为只读属性的变量
  8. [root@RHEL6 ~]# declare -p sum //-p可以单独列出变量的属性类型
  9. declare -irx sum="600" //属性为-irx,如果将变量设置为“只读”,通常得要注销在登录才能复原该变量的类型了。
  10. [root@RHEL6 ~]# sum=111 //更改sum变量内容,发现sum为自读变量
  11. -bash: sum: readonly variable
  12. [root@RHEL6 ~]# unset sum //取消变量sum,发现也无法取消
  13. -bash: unset: sum: cannot unset: readonly variable
  14. [root@RHEL6 ~]# declare +r sum //使用+参数取消r参数,发现也无法取消,(注销系统可以取消变量的只读属性)
  15. -bash: declare: sum: readonly variable
  16. [root@RHEL6 ~]#

5、参数+-的使用,相反的-号赋予某属性,而+号是取消某属性,属性有[rix]三种

点击(此处)折叠或打开

  1. [root@RHEL6 ~]# declare -ix sum=100+200+400 //直接设置成环境变量
  2. [root@RHEL6 ~]# echo $sum
  3. 700
  4. [root@RHEL6 ~]# declare -p sum //查看变量属性为-ix
  5. declare -ix sum="700"
  6. [root@RHEL6 ~]# declare +x sum //取消x属性
  7. [root@RHEL6 ~]# declare -p sum //查看变量属性为-i
  8. declare -i sum="700"
  9. [root@RHEL6 ~]# env | grep sum //同样在环境变量中也查不到sum变量了因为他取消了-x属性
  10. [root@RHEL6 ~]# declare -x sum //赋予x属性
  11. [root@RHEL6 ~]# env | grep sum //env中可以查看到sum变量了。
  12. sum=700

6、数组(array)变量类型即-a参数

声明数组变量(实际上,任何变量都可以当做数组来操作)数组(array)对写数值程序的程序员来说,可是不能错过学习的重点之一。那么如何设置数组的变量与内容呢?bash里头,数组的设置方式是:
var[index]=content  //意思是说我有一个数组名为var,而这个数组内容为var[1]="small min",var[2]="big min",var[3]="nice min"等等,那个index就是一个数字,重点是[]来设置的。目前bash提供的是一维数组。

点击(此处)折叠或打开

  1. [root@awake ~]# names=Jack
  2. [root@awake ~]# names[1]=Bone
  3. [root@awake ~]# names[2]=Awake
  4. [root@awake ~]# echo $names //直接引用names,相当于引用names[0]
  5. Jack
  6. [root@awake ~]# echo ${names[*]}
  7. Jack Bone Awake
  8. [root@awake ~]# declare -p names //查看变量属性及内容
  9. declare -a names='([0]="Jack" [1]="Bone" [2]="Awake")'
  10. [root@awake ~]# echo "${names},${names[1]},${names[2]}" //查看变量内容
  11. Jack,Bone,Awake
  12. [root@awake ~]#


阅读(1883) | 评论(0) | 转发(0) |
0

上一篇:linux read命令

下一篇:linux ulimit命令

给主人留下些什么吧!~~