在编写脚本时,在一个变量未赋初值的情况下,有时需要给它一个默认值。Bash提供了这方面的功能,见表4-4。
表4-4 变量替换
先定义var,保证var非空,表达式${var-Default}或者${var:-Default}的值就是var的值,例如:
var本身不受影响:
如果var未定义,表达式${var-Default}和${var:-Default}的值就是Default,var本身不受影响,例如:
如果var定义了,但值为空,表达式${var-Default}的值为空,而表达式${var:-Default}的值就是Default,var本身不受影响,例如:
对于用户而言,一个变量未定义和定义为空,二者效果是一样的,都是没有值,所以${var:-Default}比较常用,${var-Default}不太常用。同样道理,${var:=Default}比较常用。下面只讲${var:=Default}的使用。
如果var有值,表达式${var:=Default}的值就是var的值,例如:
如果var无值,表达式${var:=Default}的值就是Default,同时var被赋值为Default(如果var无值,表达式${var:-Default}的值也是Default,但var不变,这是${var:=Default}与${var:-Default}的区别所在)。例如:
实际上,表4-4中的Default也可以是一个变量,例如:
下面的脚本询问客户的需求,客户需要什么,就显示客户的需求,客户无明确需求的,默认为客户需要水。
运行脚本,输入beer,显示客户需要beer:
运行脚本,不输入需求(直接按回车键),显示客户需要water:
+与-是相反的运算,${var+Other}或${var:+Other}与${var-Default}或${var:-Default}的作用刚好相反。当var有值的时候,${var+Other}与${var:+Other}的值都是Other:
var本身不受影响:
当var未定义时,${var+Other}与${var:+Other}的值都是空:(www.xing528.com)
当var有定义但为空时,${var+Other}的值为Other,${var:+Other}的值为空:
如果var有非空值,${var?Message}与${var:?Message}的值就是var本身,例如:
如果var未定义,${var?Message}与${var:?Message}会显示Message,例如:
当var未定义时,在命令行直接输入${var?Message}或者${var:?Message}就会显示Message:
如果var被赋为空,${var?Message}显示空,${var:?Message}会显示Message,例如:
下面举一个${var:?Message}应用的例子。脚本positional_parameter_3.sh的第二行先检查位置参数$1是否有值,如果有,把值赋给name,然后第三行显示Good morning;如果位置参数$1没有值,第二行显示提示please input a name。
运行脚本,参数为Tom:
无参数,运行脚本:
当运行positional_parameter_3.shTom时,参数为Tom,即位置参数$1=Tom,那么表达式${1:?"pleaseinputaname"}的值为Tom,则变量name被赋值为Tom,最后显示Good morningTom。当运行positional_parameter_3.sh时,没有参数,即位置参数$1无值,执行到第二行时,显示pleaseinputaname,第三行不再执行。
下面介绍表4-4中${!varprefix*}的使用。
定义三个以字母v开头的变量:
列出当前shell以v开头的变量:
再定义两个值为空的以v开头的变量:
列出当前shell以v开头的变量:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。