shell中:=的作用

来源:互联网 发布:淘宝网店代理靠谱么 编辑:程序博客网 时间:2024/04/30 01:14


if [ "${MYSQLCOM:=-NO-}" = "-YES-" ] ; then

对其中的“:=”很是不解,开始使用“:=”作为关键字搜索,没有获得有用的信息,后来直接搜索冒号在shell中的用途,发现很多有人有这样的疑惑,我也搞明白上面表达式的意思。简单来说,就是当冒号前面的变量不存在或值为空时,就把等号后的值赋值给变量。举例来说:

#/bin/bash#例1var=1echo $var#输出 1var=2echo $var#输出 2#上述操作就是简单对变量赋值,后面的回覆盖前面的#例2unset var#删除先前定义变量,防止对下面的操作产生影响echo $var#输出空: ${var=1}echo $var#输出 1: ${var=2}echo $var#输出 1#上述操作也是对变量赋值,但与例1有些不同,赋值是放在${}中#第一个输出很容易理解,第二个输出为什么还是 1 呢#因为变量已经存在,所以不执行赋值操作#注意:行首的冒号(:)是做什么呢,如果没有这个符号,那么在脚本中会把赋值后字符作为命令来执行,#冒号是linux中一个内置的命令,相当于true,其实是啥也不做,空命令,#冒号后的赋值作为命令的参数来解析,而不是执行#例3unset varecho $var: ${var:=1}echo $var: ${var:=2}echo $var#本例很例2差不多,得到的结果是一样,区别就是赋值一个用的是"=",#另一个用的":=",看下面的例子就知道他们之间的区别了unset varecho $varvar=""#赋值为空: ${var=1}echo $var#输出空unset varecho $varvar="": ${var:=1}echo $var#输出1#结论:使用"="时,当变量不存在(未申明)才对其复制,#而":="是变量不存在或值为空时才对其赋值
原创粉丝点击