当前位置: 技术问答>linux和unix
null与unset问题
来源: 互联网 发布时间:2017-01-12
本文导语: 本帖最后由 guaren0118 于 2011-10-30 11:23:23 编辑 str= $ var=${str=expr} $ echo $var $ echo $str $ unset str $ var=${str=expr} $ echo $var expr $ ec...
str=
$ var=${str=expr}
$ echo $var
$ echo $str
$ unset str
$ var=${str=expr}
$ echo $var
expr
$ echo $str
expr
代码如上,不明白为什么输出的结果不同(主要是不太明白“$ var=${str=expr}”这行的意思),求解~
还有以下四个呢?是什么意思?
var=${str-expr} var=${str:-expr}
var=${str?expr} var=${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}
这些都是变量替换的几种形式。
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}
这些都是变量替换的几种形式。
|
$ var=${str=expr} #如果变量str设置了,则使用str的值赋值给var,否则使用expr,同时把expr赋值给str,也就是var和str都是expr。
$ echo $var #因为上面str有设置,空的,所以var也是str的值,空的
$ echo $str #现在str当然也是空的
|
$ unset str #此时变量str没有设置
$ var=${str=expr} #str没有设置,所以把expr给var,同时expr给str
$ echo $var #自然var的值是expr
expr
$ echo $str #显然str的值也是expr
expr
|
严格来说,赋值语句当中又有了变量替换的功能。姑且可以叫做复合赋值语句吧。
|
因为设置bash的规定,问我,我也不知道。bash的程序里面是这么写的。
你可一发一封邮件给bash的作者或者维护着,问问他们为什么会如此。^_^
你可一发一封邮件给bash的作者或者维护着,问问他们为什么会如此。^_^