好久前学习了变量的扩展,现在全忘光了,决定总结下。
1.${变量-值}
如果变量不存在就用后面的值来替代。
例:
[root@localhost~]# qq=haha
[root@localhost~]# yy=${qq:-123}
[root@localhost~]# echo $yy
haha
[root@localhost~]# unset qq
[root@localhost~]# yy=${qq-123}
[root@localhost~]# echo $yy
1232.${变量:-值}不存在或者为空。
例:
1.不存在时
[root@localhost~]# unset qq
[root@localhost~]# yy=${qq:-123}
[root@localhost~]# echo $yy
123
2.存在并为空时
[root@localhost~]# qq=
[root@localhost~]# yy=${qq:-123}
[root@localhost~]# echo $yy
1234.${变量:=值} 效果同上!这里不再演示!
5.${变量:+值} 如果非空则取后面的值。
[root@localhost~]# qq=haha
[root@localhost~]# yy=${qq:+wahaha}
[root@localhost~]# echo $yy
wahaha6.${变量:?'xx'} 变量不存在或者为空,显示后面的字母。(通常定义报错信息)
[root@localhost~]# unset qq
[root@localhost~]# yy=${qq:?'$qq is not found'}
[root@localhost~]# echo $yy
-bash: qq: $qq is not found7.${变量:offset} 去除变量前N个字符,N为offset的值。
去除12345字符:
[root@localhost~]# qq=123456789
[root@localhost~]# yy=${qq:5}
[root@localhost~]# echo $qq
67898.${变量:offset:长度} 先去掉,再取值:(offset为n,长度为取值)
例:我想要中间的5.
[root@localhost~]# qq=123456789
[root@localhost~]# yy=${qq:4:1}
[root@localhost~]# echo $yy
59.${变量%模式}从后最短删除:
qq=`grep ^root /etc/passwd`
echo $qq
root:x:0:0:root:/root:/bin/bash
yy=${qq%:*}
echo $yy
root:x:0:0:root:/root
这里少了:/bin/bash.!10.${变量%%模式}从后最长删除。
echo $qq
root:x:0:0:root:/root:/bin/bash
yy=${aa%%:*}
echo $yy
root11.${#变量}计算字母或字符长度。
qq=1234567
yy=${#qq}
echo $yy
712.${变量#模式}从前最短删除。
[root@localhost ~]# qq=`grep ^root /etc/passwd`
[root@localhost ~]# echo $qq
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# yy=${aa#^:}
[root@localhost ~]# echo $yy
x:0:0:root:/root:/bin/bash
最前面的root没有了!13.${变量##模式}从前最长删除。
[root@localhost ~]# qq=`grep ^root /etc/passwd`
[root@localhost ~]# echo $qq
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# yy=${qq##*:}
[root@localhost ~]# echo $yy
/bin/bash14.${变量/符号1/符号2}将第一个符号换成第二个。
[root@localhost ~]# qq=`grep ^root /etc/passwd`
[root@localhost ~]# echo $qq
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# yy=${qq/:/#}
[root@localhost ~]# echo $yy
root#x:0:0:root:/root:/bin/bash15.${变量//符号1/符号2}将所有符号换成第二个。
[root@localhost~]# qq=`grep ^root /etc/passwd`
[root@localhost~]# echo $qq
root:x:0:0:root:/root:/bin/bash
[root@localhost~]# yy=${aa//:/#}
[root@localhost~]# echo $yy
root#x#0#0#root#/root#/bin/bash16.${变量/符号/}删除 把变量第一个符号删除.删除所有为${变量//符号/}
[root@localhost ~]# yy=${qq/:/}
[root@localhost ~]# echo $yy
rootx:0:0:root:/root:/bin/bash

















