当前位置:  技术问答>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...

本帖最后由 guaren0118 于 2011-10-30 11:23:23 编辑

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}
这些都是变量替换的几种形式。

|

$ 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的作者或者维护着,问问他们为什么会如此。^_^

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql类types的类成员方法: null定义及介绍
  • linux网络编程里面,accept(listen_fd,NULL,NULL)函数的地址参数为NULL是什么意思?
  • java命名空间javax.lang.model.type枚举typekind的类成员方法: null定义及介绍
  • 请教:null, "null", ""有什么区别
  • java命名空间java.io接口objectstreamconstants的类成员方法: tc_null定义及介绍
  • /usr/doc/*/*> /dev/null 2> /dev/null
  • java命名空间javax.xml类xmlconstants的类成员方法: null_ns_uri定义及介绍
  • if(month!=null&&(!month.equals("null"))) 有必要吗?
  • java命名空间javax.swing.text.html类html的类成员方法: null_attribute_value定义及介绍
  • 请问null!=myobj和myobj!=null有什么不同?
  • Mysql设置查询条件(where)查询字段为NULL
  • SQL语句查询是否为空 =null及null
  • 帮忙解释下?mplayer *.mp3 < /dev/null > /dev/null 2>1&
  • 1>/dev/null 2>/dev/null 跟在命令行后面,什么目的?
  • C#对象为Null模式(Null Object Pattern)实例教程
  • sql语句查询=null及null是否为空的判断方法
  • 如何实现判断一个字符串为null?
  • 请问strtok(NULL,delimits)是什么意思?
  • /dev/null, /dev/zero 是指什么设备?
  • 覆盖了/dev/null,系统启动不了
  • C语言读取MySQL的NULL值出错


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3