shell中分别给null和unset的变量赋值问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell中分别给null和unset的变量赋值问题相关的知识,希望对你有一定的参考价值。

代码一:
$ str= # 设为 null
$ var=$str=expr
$ echo $var
$ echo $str

代码二:
$ unset str # 取消
$ var=$str=expr
$ echo $var
expr
$ echo $str
expr

为何同样的 var=$str=expr 在 null 与 unset 之下不同呢?
哪位高手帮我分析下原理。谢谢啦!

1、在赋值的的时候, 等号前后一定不要有空格。
代码一输出一个行(包含一个空格)
2、设置一个变量为null, 与unset这个变量, 并不是一回事。
#var3=$V3
#echo $var3 没输出
#
一个未初始化的变量将会是"null"值 - 就是未赋值(但并不是代表值是0!)。
参见网址:http://www.cublog.cn/u3/103983/showart_2340293.html
参考技术A 这没什么原理可言,就是 bash变量扩展规定的用法:

$var:=abc
var 如果 unset 或者 null, 给 var 赋值成 abc,同时 $var:=abc 扩展成 abc

$var=abc
var 如果 unset , 给 var 赋值成 abc,同时 $var=abc 扩展成 abc (此时只判断是否unset,不判断是否为null)本回答被提问者采纳
参考技术B date是shell的时间命令
通过调用这个命令可以得到时间
var=`date "+%Y%m%d %H%M%S"`
``之间的是shell命令,包裹起来就可以将结果传给前面的变量,""之间的是想要的时间格式
具体可以用date --help查看

php中unset一个变量之后, 通过引用赋值引用这个变量的变量会被unset吗?

在php中变量的赋值分为按值赋值,  和引用赋值.

在按值赋值中, $a = val;  $b = $a ; 可以看成$a = val; $b =val;变量b被赋予a的值之后,  a和b便没有任何的引用关系了, 此时改变其中任意一个值, 另外一个值不会受到影响.

在引用传值种, $a = val; $b = &$a;  也可以看成$a = val; $b =val; 不过变量a和b还要满足一个条件就是必须相等, 因为两个变量有着共同的引用, 当一个值改变时, 另外一个值也跟着改变.  如 在给变量b赋值,  $b = val2;  并打印a和b,  发现a, b的值都为val2.  

 

在通过引用赋值的中 $a = val; $b = &$a; 如果通过unset()函数来销毁a,  并输出a, b , a变量会提示变量not  definded,那么b变量会得到什么结果呢?

打印变量b仍然会得到val, 因为unset()在销毁a时,  会检查a对应的值是否还存在其他的引用,  如果存在,  则只销毁变量a不销毁a对应的值.

以上是关于shell中分别给null和unset的变量赋值问题的主要内容,如果未能解决你的问题,请参考以下文章

shell 如何将系统时间赋值给一个变量

PHP之null

shell 变量赋值运算

shell编程之变量赋值

php ,空值(Null)

php中unset一个变量之后, 通过引用赋值引用这个变量的变量会被unset吗?