9 高级变量
9.1 高级变量赋值
范例:
[root@centos8 ~]#title=ceo [root@centos8 ~]#name=${title-mage} [root@centos8 ~]#echo $name ceo [root@centos8 ~]#title= [root@centos8 ~]#name=${title-mage} [root@centos8 ~]#echo $name [root@centos8 ~]#unset title [root@centos8 ~]#name=${title-mage} [root@centos8 ~]#echo $name mage
范例:
[root@centos8 ~]#title=ceo
[root@centos8 ~]#name=${title:-mage}
[root@centos8 ~]#echo $name
ceo
[root@centos8 ~]#title=
[root@centos8 ~]#name=${title:-mage}
[root@centos8 ~]#echo $name
mage
[root@centos8 ~]#unset title
[root@centos8 ~]#name=${title:-mage}
[root@centos8 ~]#echo $name
mage
9.2 高级变量用法-有类型变量
Shell变量一般是无类型的,但是bash Shell提供了declare和typeset两个命令用于指定变量的类型,两个命令是等价的
declare [选项] 变量名
-r 声明或显示只读变量 -i 将变量定义为整型数 -a 将变量定义为数组 -A 将变量定义为关联数组 -f 显示已定义的所有函数名及其内容 -F 仅显示已定义的所有函数名 -x 声明或显示环境变量和函数,相当于export -l 声明变量为小写字母 declare –l var=UPPER -u 声明变量为大写字母 declare –u var=lower
9.3 变量间接引用
9.3.1 eval命令
eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量,该命令对变量进行两次扫描
范例:
[root@centos8 ~]# CMD=whoami [root@centos8 ~]# echo $CMD whoami [root@centos8 ~]# eval $CMD root [root@centos8 ~]# n=10 [root@centos8 ~]# echo {0..$n} {0..10} [root@centos8 ~]# eval echo {0..$n} 0 1 2 3 4 5 6 7 8 9 10 [root@centos8 ~]#i=1 [root@centos8 ~]#j=a [root@centos8 ~]#$j$i=hello -bash: a1=hello: command not found [root@centos8 ~]#eval $j$i=hello [root@centos8 ~]#echo $j$i a1
9.3.2 间接变量引用
如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值就称为间接变量引用 variable1的值是variable2,而variable2又是变量名,variable2的值为value,间接变量引用是指通过variable1获得变量值value的行为
variable1=variable2 variable2=value
bash Shell提供了两种格式实现间接变量引用
eval tempvar=\$$variable1 tempvar=${!variable1}
范例:
[root@centos8 ~]#ceo=name [root@centos8 ~]#name=mage [root@centos8 ~]#echo $ceo name [root@centos8 ~]#echo $$ceo 33722ceo [root@centos8 ~]#echo $BASHPID 33722 [root@centos8 ~]#echo \$$ceo $name [root@centos8 ~]#eval tmp=\$$ceo [root@centos8 ~]#echo $tmp mage [root@centos8 ~]#echo ${!ceo} mage [root@server ~]# NAME=wangxiaochun [root@server ~]# N=NAME [root@server ~]# N1=${!N} [root@server ~]# echo $N1 wangxiaochun [root@server ~]# eval N2=\$$N [root@server ~]# echo $N2 wangxiaochun
9.3.3 变量引用reference
[root@centos8 ~]#cat test.sh #!/bin/bash ceo=mage title=ceo declare -n ref=$title [ -R ref ] && echo reference echo $ref ceo=wang echo $ref [root@centos8 ~]#bash test.sh reference mage wang
本文链接:https://www.yunweipai.com/34354.html
网友评论comments