shell中的变量替换

转载 2016年08月29日 10:03:51

(1):=句法

      在这种替换中,使用和前例中相同的:=句法来设置默认值。


       在使用“:=”进行比较时,username变量已经被定义了,但是它的值为空。因此,这里对echo命令使用了变量LOGNAME的值,即设置变量username的值为LOGNAME的值。

       有了这个特殊的句法,只有当变量username已被定义,而且有一个实际的非空值时,变量username才会被设置为变量LOGNAME的值。和前例的主要不同是使用活动命令(echo)而不是被动的冒号来设置变量的默认值,当活动命令被调用时,默认赋值仍然会执行,并输出显示结果。

(2)=句法

      下面的语句和:=句法非常类似,但是没有冒号。


      和前面一样,变量username已经被定义,但是它的值为空。在这个句法中,命令将会输出“echo”之后语句的执行结果。因为变量username虽然为空值,但已经被定义了,所以除了一个回车不会再有其他输出。只有当username变量完全没有定义时,才会将其设置为变量LOGNAME的值。

      当脚本或者函数需要依赖某些定义变量时,就要使用这种语法。它主要应用于登陆。如果一个特定环境变量还没有被定义,就可以给它赋予脚本所需要的值。

(3):-句法

      AA=${BB:-$CC}   如果BB为空,则AA等于CC,如果BB不为空,则AA为BB。且BB值保持不变

      在这个命令中,因为变量username虽然已被定义但是为空值,echo语句将使用LOGNAME变量的值。


      这里username变量的值保持不变。这个命令和使用=句语法的不同之处是,在此命令被执行前,仅仅在代码中的"${}"句法中做替换。也就是说,echo命令将输出LOGNAME变量的值,但是这个值不会被赋给username变量。

(4)-句法

      当删除上述的:-语句中的冒号,即变成-的时候,因为username变量已被定义,输出将为空。如果未定义,就会使用LOGNAME变量的值。还有一点也与:-句法相同,即username变量的值没有改变。


       当脚本评价或检查系统环境的时,:-句法和-句法都可以使用。这两种检查基本上是相反的,它们用默认值替换变量,或者甚至于不依赖username变量是否已经被定义。如果脚本中急需要一组被定义的变量,也需要一些不该被定义的变量,那么在脚本执行任务之前组合这两种句法,肯定可以实现正确的设置。

(5):?句法

       使用:?句法时,如果username变量已被定义为非空值,在echo命令中就会使用username变量的值。如果username变量已被定义但却没有一个真正的值(也就是说非空)或者完全未被定义,那么在echo命令中就会使用LOGNAME的值,并且脚本退出执行


      如果把问号字符的参数改为某种错误字符,那这个语句就会在代码调试和查找未定义变量时变得很有用。这段代码不仅仅输出字符串,而且会显示代码在脚本中所在行的位置。

(6)?句法

       从:?句法中去掉冒号使用username变量不必一定为非空值。如果username只被设置为一个空值,那么将使用这个空值。相反的,如果username变量没有被定义,则同前所述的:?句法,执行LOGNAME替换,脚本退出运行,并显示退出时所在代码行在脚本中的位置。


      在脚本调试过程中,需要检查变量是否已被定义或者是非空的是否,:?和?句法是非常有用的。这个代码最大的优点是脚本会从出错行退出,而且会显示出错误行行号。在要显示的文本中加上类似于“is undefined”或者“has a null value”信息,可以更清楚的说明脚本中的问题。

(7):+句法

      和前面的例子相比,这个句法有相反的作用。这是因为,只有当变量已被定义而不是未定义的时候,“${}”表达式才执行替换。


       如果这里的username变量已被定义而且非空,因此使用LOGNAME的值。如果username变量未定义,或者已定义但为空,则将使用空值。在任何情况下,username变量的值都不会改变。

(8)+句法

       如果去掉前例:+中的冒号成+,表示一旦变量username被定义,“${}”表达式都将使用LOGNAME的值;进行这个替换时,username变量不需要有一个实际的值(即非空值)。如


       “:+”、“+”句法的用法很多是和“:-”、“-”句法的用法相同的。最主要的区别是“:+”、“+”示例检查的是一个已定义的变量,而不是未定义的变量。这类类似于加法、减法——一枚硬币的两面。

1

相关文章推荐

shell变量替换:=、=、:-、-、:?、?、:+、+句法

linux bash shell变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法       变量替换和变量默认值设置是紧密相关的。       参数扩张是将类似于...

shell中的条件判断、参数以及变量替换

一、test命令   test命令是shell内部命令,它计算作为其参数的表达式是真还是假。   如果表达式为真,则test返回0(注意与C语言0表示false不同),如果表达式为假,返回非0。   ...
  • wp500
  • wp500
  • 2013年11月04日 11:29
  • 732

linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法

linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法 变量替换和变量默认值设置是紧密相关的,至少从概念出发是如此。 参数扩张是将类似于...

shell 变量替换

1,参数替换:                    不含有“:”的,只要定义了,就生效,不管是否为空                   含有“:”的,即使定义了,但是为空就不生效         ...

Shell变量替换

如果表达式中包含特殊字符,Shell 将会进行替换。例如,在双引号中使用变量就是一种替换,转义字符也是一种替换。 举个例子: #!/bin/basha=10echo -e "Value o...

shell变量里的字符替换

b=${a/123/321};将${a}里的第一个123替换为321b=${a//123/321};将${a}里的所有123替换为321shell调试:sh -x aaa.shfrom:http://...
  • Augusdi
  • Augusdi
  • 2014年11月11日 13:04
  • 31000

Shell (二) 变量替换

1.:=    username 未定义或值为空时会被设置为变量 LOGNAME 的值 只有当变量 username 已经被定义且有一个非空值时,才不会被设置为 LOGNAME 值 ...

shell变量替换:=、=、:-、-、:?、?、:+、+句法

http://www.cnblogs.com/fhefh/archive/2011/04/22/2024750.html

Linux Shell编程(6)——变量替换

变量的名字是它的值保存的地方。引用它的值称为变量替换。$让我们仔细地区别变量和变量的值。如果variable1是一个变量的名字,那么$variable1就是引用这个变量的值――即这个变量它包含的数据。...

shell学习六-----变量替换

1、${var:-word} 如果变量为空或未被定义(unset),那么返回word,但不改变var的值。 [root@node01 data]# result=${test:-UNSET} [...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell中的变量替换
举报原因:
原因补充:

(最多只允许输入30个字)