SHELL 变量进阶
1.${#var}
查看变量的长度
[test@Server1 shell]$ unset name
[test@Server1 shell]$ name=tom
[test@Server1 shell]$ echo ${name}
tom
如果变量为设置或变量为NULL,则变量的程度为空
[test@Server1 shell]$ unset name
[test@Server1 shell]$ echo ${#name}
0
[test@Server1 shell]$ name=
[test@Server1 shell]$ echo ${#name}
0
2.${var:offset:length}
截取变量
offset 0 表示第一个
[test@Server1 shell]$ unset name
[test@Server1 shell]$ name=tom
[test@Server1 shell]$ echo ${name:0:1}
t
如果省略了length则代表截取到变量的结尾
[test@Server1 shell]$ unset name
[test@Server1 shell]$ name=tom
[test@Server1 shell]$ echo ${name:1}
om
如果offset为负则代表截取变量是从结尾开始的,同时特别注意offset和前面的”:”有一个空格,例如:
[test@Server1 shell]$ unset name
[test@Server1 shell]$ name=tom
[test@Server1 shell]$ echo ${name:-1}
tom
[test@Server1 shell]$ echo ${name: -1}
m
注意:没有空格的返回了整个变量
3.${!var}
相当于${var}存放的指针,获取指针指向的真正变量
[test@Server1 shell]$ name=tom
[test@Server1 shell]$ name2=name
[test@Server1 shell]$ echo ${!name2}
tom
4.${var%patten}
按照patten的匹配模式,截取后面的变量。
如果是%%则按最长匹配原则,相当于正则表达式里的贪婪模式
[test@Server1 shell]$ var=b_syslog
[test@Server1 shell]$ echo ${var%s*}
b_sy
[test@Server1 shell]$ echo ${var%%s*}
b_
*代表任意多个字符
5.${var#patten}
按照patten的匹配模式,截取前面的变量。
如果是##则按最长匹配原则,相当于正则表达式里的贪婪模式
[test@Server1 shell]$ unset var
[test@Server1 shell]$ var=b_syslog
[test@Server1 shell]$ echo ${var#*s}
yslog
[test@Server1 shell]$ echo ${var##*s}
log
6.${var//patent/repalece}
变量替换
[test@Server1 shell]$ name=Tom
[test@Server1 shell]$ echo ${name//T/t}
tom
?代表任意一个字符
[test@Server1 shell]$ echo ${name//?/*}
***
7.BASH4增加了大小写的转换
查看shell版本:
[test@Server1 shell]$ echo ${BASH_VERSION[*]}
4.1.2(1)-release
7.1转大写:${var^patten}
^:将符合patten的首字母转成大写,如果忽略patten则直接将首字母转成大写
^^:将符合patten的字母转成大写,如果忽略patten则直接将字母转成大写
[test@Server1 shell]$ name=tOm
[test@Server1 shell]$ echo ${name^}
TOm
[test@Server1 shell]$ echo ${name^^}
TOM
[test@Server1 shell]$ echo ${name^[tm]}
TOm
[test@Server1 shell]$ echo ${name^^[tm]}
TOM
7.2转小写${var,patten}
,:将符合patten的首字母转成大写,如果忽略patten则直接将首字母转成大写
,,:将符合patten的字母转成大写,如果忽略patten则直接将字母转成大写
[test@Server1 shell]$ unset name
[test@Server1 shell]$ name=TOm
[test@Server1 shell]$ echo ${name,}
tOm
[test@Server1 shell]$ echo ${name,,}
tom
[test@Server1 shell]$ echo ${name,[TO]}
tOm
[test@Server1 shell]$ echo ${name,,[TO]}
tom
分类: Linux Shell, 操作系统