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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。