Linux 变量操作
一、 首先算是变量的编辑吧:
1. 变量字符匹配删除输出。 2. 变量字符固定偏移并截出字符。
3. 变量字符的替换。
1. 举一个例子先: 关于#号的。 ${变量#匹配字符}
$ do="Hello World" $ echo $do Hello World $ echo ${do#He} llo World $ echo ${do#*l} lo World
#号在上面那种变量应用中,把左边变量的值,按右边的字符串从左到右最短区配,
所区配到的字符删除输出。 支持通配符。
$ echo ${do##*l} d
##号,这个则就是最长区配了。 记住是从左到右的区配顺序。
再来一个例子: 关于%号的。 ${变量%匹配字符}
$ echo $do Hello World $ echo ${do%ld} Hello Wor $ echo ${do%o*} Hello W
%号跟上面#号的形式都一样,只不过是从右到左的匹配。 同样的一个%号是 最短区配。
$ echo ${do%%o*} Hell
%%号,两个%号,最长区配 。 通配符都是支持的。 毕竟都是在shell下,经由shell解释输出。
2. 上面的 # % 都是用来定义匹配字符的操作。 而下面是用来定义固定字符的操作。
${变量:数字}
$ echo $do Hello World $ echo ${do:3} lo World
前面的3个字符删除输出, 专业点叫作 偏移 , 向右偏移3个字符。
$ echo ${do:3:2} lo $ echo ${do:3:5} lo Wo
在上面偏移的基础上,再向后截取输出几位字符。 空格可是字符啊。
3. 这边是用来替换变量的字符的。 ${变量/匹配字符/替换字符}
$ echo ${do/l/L} HeLlo World
把第一个匹配到的字符,也就是l , 替换成大写L .
这里是只替换了第一个匹配到的字符。如果把变量后面的/变成两个,就变成替换所有了。
$ echo ${do//l/L} HeLLo WorLd
替换了所有的l , 这里也是可以用通配符的, 但是这里没有最长最短匹配之说,只有替换1个还是替换所有。 至于效果,亲们可以自己试试。
二、 变量的值,忘了学的是什么名了, 以后再改。
变量为空也是值。
1. ${变量-值} ,里面的是减号。 那个值当然也可以用变量,不过要加上$,相当于变量引用。
-号的左边和右边完全是不同的两个部分。
$ echo $do Hello World $ echo ${do-kaka} Hello World #在do有值的情况下,输出do的值。 $ unset do $ echo ${do-kaka} #在没有do变量的情况下,也就是没有值。 输出kaka。 kaka $ do= $ echo ${do-kaka} #在do有值的情况下,输出do的值,do是空值。 #所以输出空。
这个的别一种方式一般在判断默认值的时候用。如: do=${do:-kaka} 下面再说。
透露一点, 加上 : 将代表空不再判断为值, 上面最后一个例子将输出 kaka
2. ${变量=值} ,里面是等号。
$ echo $do Hello World $ echo ${do=kaka} #在do有值的情况下,输出do的值。 Hello World $ unset do $ echo ${do=kaka} #在没有do变量的情况下,没有值。输出kaka。 kaka $ echo $do kaka #并且把kaka给变量do。
比 - 加了一项,只要输出kaka,就会把kaka赋给do。
3. ${变量+值} , 里面是加号。
$ echo $do Hello World $ echo ${do+kaka} #do有值的情况下,输出kaka kaka $ unset do $ echo ${do+kaka} #在没有do这个变量的情况下,没有值。那就没有吧。 # $ do= $ echo ${do+kaka} #空值,输出kaka kaka
看样子正好与 - 相反, 这个是变量有值则用后面的值,而 - 号是没值则用后面的值。
4. ${变量?值}
$ echo $do Hello World $ echo ${do?kaka} Hello World $ unset do $ echo ${do?kaka} # 看到了没,在没有do这个变量的情况下,没有值。 # 提示错误信息是 kaka bash: do: kaka $ do= $ echo ${do?kaka}
除了没有值的情况下会报错,并且报错信息是kaka外,就没有别的了。
下面还是关于 - = + ? 的,不过变成了 :- := :+ :? 。
不一样之处就是把空值给抹去了,从此以后空就真的空了, 空不再代表值而存在,
而是跟unset一样。
这里说明一下, 以shell来说。其实unset就是把变量的内存空间的地址给撤销了,
而变量空值,就是有变量的内存空间地址,不过内存空间里面没有数据。
而bash(shell的一种)的变量是随用随申请的,所以说不会发生没有变量的这一种情况。
1. ${变量:-值} .
$ echo $do Hello World $ echo ${do:-kaka} Hello World $ unset do $ echo ${do:-kaka} #没有do变量,同样的相当于没有值。 输出kaka kaka $ do= $ echo ${do:-kaka} #空不再代表值, 在do没有值的情况下 #输出kaka kaka
怎么样,区别只有一点, 空不再代表值了。
2. ${变量:=值} .
$ echo $do Hello World $ echo ${do:=kaka} Hello World $ echo $do Hello World $ unset do $ echo ${do:=kaka} kaka $ echo $do kaka $ do= $ echo ${do:=kaka} #空不再代表值,所以输出kaka kaka $ echo $do kaka
还是那个意思,kaka输出,并且赋值给了do。 空不再代表值了。
3. ${变量:+值}
$ echo $do Hello World $ echo ${do:+kaka} #在do有值的情况下,输出kaka kaka $ unset do $ echo ${do:+kaka} #在do不存在的时候,也就是没有值。 输出do的值, #而do的值当然是不存在的, 不过还是会输出空白行。 $ do= $ echo ${do:+kaka} #do空着手来,手不再是值了。 kaka是不会理它的。 #同样的空白行。
+ 号是有值才会用后面的那个值的。 跟-号正好相反。
4. ${变量:?值}
$ echo $do Hello World $ echo ${do:?kaka} Hello World $ unset do $ echo ${do:?kaka} #没有do变量,当然没有值,报kaka错误。 bash: do: kaka $ do= $ echo ${do:?kaka} #do为空,代表没有值。 报kaka错误。 bash: do: kaka
这个跟-号也差不多了, 只不过还里是输出的错误信息。
变量值总结:
${Var:-Value} 变量Var 为unset 或 null 则输出Value。 有值则输出变量Var的值。
${Var:=Value} 变量Var 为unset 或 null 则输出Value,并且赋值于变量Var。 同上。
${Var:+Value} 变量Var 为unset 或 null 则输出变量Var。 有值则输出Value.
${Var:?Value} 变量Var 为unset 或 null 则输出错误信息Value。 有值则输出变量Var的值。
${Var-Value} 变量Var 为 unset 则输出Value。 有值或为空,则输出变量Var的值。
${Var=Value} 变量Var 为 unset 则输出Value,并且赋值于变量Var。 同上。
${Var+Value} 变量Var 为 unset 则输出变量Var。 有值或为空,则输出Value
${Var?Value} 变量Var 为 unset 则输出错误信息Value。 有值或为空, 则输出变量Var。
不求能够帮助大家多少,只求不要误导大家。 如有哪位朋友发现错误请帮忙指出。
本文出自 “大蕃茄” 博客,请务必保留此出处http://opens.blog.51cto.com/989185/1564058
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。