[Linux](七) --shell bash学习----变量内
2019-01-09 本文已影响13人
你就像只铁甲小宝
今天来学习下,变量内容的删除、替换与替代。一开始没看懂,现在理解了,结合实践总结一下,怕下次忘了。
1.我们用path变量来学习和实践
如图:
在这里插入图片描述
2.变量内容的删除,#,%的学习
删除有两种形式:
1.从左向右删除,用的是符号#。
2.从右到向左删除,用的是符号%。
先学习#的使用
若我想删除,如下部分:
使用:echo ${path#/*/bin:}
在这里插入图片描述
**解释:
号代表删除的意思。
* 号可以匹配0到无穷多个字符,这里匹配的是usr/local/sbin:/usr/local/bin
整个/*/bin: == /usr/local/sbin:/usr/local/bin:**
在举个例子:
echo ${path#/*:}
这里从左到右匹配的是/usr/local/sbin:,然后就把它给删除了。
那若想保留的只剩下最后一个目录 /bin:
echo ${path##/*:}
会发现这里使用了##号,有什么不同呢?
其实 /*:可以匹配成/usr/local/sbin: 但其实也可以匹配成
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
只是下面这个长,上面那个比较短。##号会匹配最长的那个,所以最终结果只剩下/bin了。
学习%的使用
%号可以从右到左删除。
echo ${path%:/bin}
例子:
例子
在这里插入图片描述
从右到左匹配,
:/*
匹配的是:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
3.变量内容的替换,格式${变量/oldvar/new/var}
我们将usr第一个替换成大写的USR。
echo ${path/usr/USR}
我们将usr全部替换成大写的USR。
echo ${path//usr/USR}
在这里插入图片描述
对比下可以看到,用了两个//号后,就可以把所有符合的字符全部替换掉。
4.变量的替代,使用符号-
变量的替代可以用来判断变量是否存在。
echo ${path-root}
-号的意思是,若变量path不存在,则用字符root替代掉,但若path存在,则不替代。
因为我们的path存在,所以没有替代掉。
我们来试试不存在的变量,如图:
在这里插入图片描述
变量test不存在,所以可以替换掉。
提醒:-号的替代并不会改变原来变量的值,想要把旧的变量内容一起替代的话,可以使用=号。
后记:
下次有时间可以做点练习巩固下,感觉这些还是要多练记得牢固。