变量操作总结:
${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。
在这种的操作中,只有三种情况:1. 变量有值, 2. 变量没有值, 3. 没有变量
在上面加:的操作符中, 空不代表值, 在下面没有:号的操作符中,空也代表为值。
${变量} 一般变量引用。 {} 一般情况可省略。
${#变量} 取变量中字符的个数(长度)。
一、 变量值的编辑:
1. 变量字符匹配则不输出。 2. 变量内容字符偏移并截出余下的部分字符。
3. 变量字符的替换。
1. 所匹配到的变量内容将不显示。
操作符:# ${变量#匹配字符}
$ do="Hello World" $ echo $do Hello World $ echo ${do#He} llo World #He没有显示 $ echo ${do#*l} lo World #从左到右匹配
#号在上面那种变量应用中,把左边变量的值,按右边的字符串从左到右最短区配,
所区配到的字符不输出。 支持通配符。
操作符: ##
$ echo ${do##*l} d #变量的值是Hello World, 从左边一直匹配到倒数第二个字符l.
##号,这个则就是最长区配了。 记住是从左到右的区配顺序。
操作符:% ${变量%匹配字符}
$ 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. 变量有值, 2. 变量没有值, 3. 没有变量
注意: 一般情况下,变量为空也是一种值。 除非有特殊的操作。
do= do变量有值了。
declare var 生成了var变量,但var变量没有值。
1. ${变量-值}
里面的是减号。 那个值当然也可以用变量,不过要加上$,相当于变量引用。-号的左边和右边完全是不同的两个部分。
$ echo $do Hello World $ echo ${do-kaka} #在do有值的情况下,输出do的值。 Hello World $ unset do #删除变量do $ echo ${do-kaka} #在没有do变量的情况下,也就是没有值。则输出后面的值。 kaka $ do= #在do为空的情况下。 $ echo ${do-kaka} #在do有值的情况下,输出do的值,do是空值。 #所以输出空。
这个的别一种方式一般在判断默认值的时候用。如: do=${do:-kaka}
2. ${变量=值} 里面是等号。
$ echo $do Hello World $ echo ${do=kaka} #在do有值的情况下,输出do的值。 Hello World $ unset do $ echo ${do=kaka} #在没有do变量的情况下,或没有值。输出后面的值 kaka $ echo $do kaka #并且把kaka赋给变量do。
比 - 多了一项功能,只要在变量,就会把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就是把变量的内存空间的地址给撤销了,
而变量空值,就是有变量的内存空间地址,不过内存空间里面没有数据。
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为空,空不再代表值。 没有值就不会输出后面的值。 #同样的空白行。
+ 号是有值才会用后面的那个值的。 跟-号正好相反。
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
这个跟-号也差不多了, 只不过还里是输出的错误信息。
good boy, nice girl.
本文出自 “On Foot” 博客,请务必保留此出处http://fanqie.blog.51cto.com/9382669/1649669