以前看到一个例子,刚开始不明白后面经过查阅查阅资料理解了,今天整理资料的时候又看到就写出来保存在这里,方便以后查阅。
$str= #str为null
$var=${str=expr} #定义var
$echo $str
$echo $var
$unset str #取消str
$var=${str=expr}
$echo $var
expr
$echo $str
expr
看出结果的不同了吗?
为何执行同样的命令,得出的结果却是不同呢?
var=${str=expr},他的工作机制是这样:如果变量str不存在,就将expr作为返回值并将expr赋值给str,否则就返回str原来的值。
我想你们应该明白上面的原因了。还有相似的个命令:
var=${str:=expr},多了个冒号。
意思是:如果变量str不存在或者为null,就将expr作为返回值并将expr赋值给str,否则就返回str原来的值。
++++++++我分割线+++++++++
我们可以做下简单的测试:
]$ var=${now=expr} #变量不存在时
]$ echo $now
expr
]$ echo $var
expr
]$ old=12 #变量已赋值时
]$ var1=${old=expr}
]$ echo $old
12
]$ echo $var1
12
]$ old2= #变量值为空时
]$ var2=${old2=expr}
]$ echo $old2
]$ echo $var2
]$