好久前学习了变量的扩展,现在全忘光了,决定总结下。

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
123

2.${变量:-值}不存在或者为空。

 例:

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
123


4.${变量:=值} 效果同上!这里不再演示!


5.${变量:+值} 如果非空则取后面的值。

[root@localhost~]# qq=haha
[root@localhost~]# yy=${qq:+wahaha}
[root@localhost~]# echo $yy
wahaha


6.${变量:?'xx'} 变量不存在或者为空,显示后面的字母。(通常定义报错信息)

[root@localhost~]# unset qq
[root@localhost~]# yy=${qq:?'$qq is not found'}
[root@localhost~]# echo $yy
-bash: qq: $qq is not found


7.${变量:offset} 去除变量前N个字符,N为offset的值。

 去除12345字符:

[root@localhost~]# qq=123456789
[root@localhost~]# yy=${qq:5}
[root@localhost~]# echo $qq
6789


8.${变量:offset:长度} 先去掉,再取值:(offset为n,长度为取值)

例:我想要中间的5.

[root@localhost~]# qq=123456789
[root@localhost~]# yy=${qq:4:1}
[root@localhost~]# echo $yy
5


9.${变量%模式}从后最短删除:

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
root

11.${#变量}计算字母或字符长度。

qq=1234567
yy=${#qq}
echo $yy
7


12.${变量#模式}从前最短删除。

[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/bash


14.${变量/符号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/bash


15.${变量//符号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/bash

16.${变量/符号/}删除 把变量第一个符号删除.删除所有为${变量//符号/}

[root@localhost ~]# yy=${qq/:/}
[root@localhost ~]# echo $yy
rootx:0:0:root:/root:/bin/bash