Linux 变量操作记录

变量操作总结:

                                                            

${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

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