例子1:
$ str=
$ var=${str=expr}
$ echo $var
$ echo $str
例子2:
$ unset str
$ var=${str=expr}
$ echo $var
expr
$ echo $str
expr
原理:
null是指该变量存在(内存存储单元),但其值是空的。 set | grep variable_name unset是删除变量名(连同内存存储单元也一并删除),说白一点,就是该变量不存在了。 set | grep variable_name ${parameter=word} 注意"="等号左边没有":"冒号。 ${parameter=word} 一、如果parameter属于unset的那种情况: parameter没进行定义,bash就把word赋值给parameter,并显示parameter变量的值。 $ echo $testvar #没有定义testvar变量 $ echo ${testvar=123} $ 123 $ echo $testvar #打印testvar的值 $ 123 二、如果parameter属于null那种情况 ${parameter=word},由于parameter进行了定义(只不过其值为空),那么bash只显示parameter的值(后面也就不进行赋值操作)。 $ testvar= #对testvar赋null值 $ echo ${testvar=123} #无内容显示 $ echo $testvar #无内容显示 如果把${testvar:=123},注意多了一个冒号,其运行结果跟上述的unset的那种情况一样。 ":" 是指为空(null)的意思。 ${testvar:=123},不管testvar为空或者没有进行定义,都把123赋给testvar这个变量,并打印该变量的值。 还有 1. var=${str-expr} vs var=${str:-expr} 2. var=${str+expr} vs var=${str:+expr} 3. var=${str?expr} vs var=${str:?expr} 这些都是变量替换的几种形式。 |