在Shell中,经常会用到:=和:-这样的操作符。
这两个操作符功能很相似,下面简单比较下:
#color="red" echo "color is ${color}" //这样应该会打印color is (空白) 稍微改造下: echo "color is ${color:-"no color"}" //这样应该会打印color is no color 或者 echo "color is ${color:="no color"}" //这样同样会打印color is no color
但是假如继续打印color变量,会出现什么情况呢?
//如果之前使用:-来赋值的话 echo ${color} 会继续打印空白 //而如果之前使用:=来赋值的话 echo ${color} 会打印no color
这样可以看明白了吗? :=与:-同样为当变量未定义时的赋值语句,但前者是一个肯定的赋值,而后者只是一个简单的替换。
同样看下:?与?操作符的简单例子
:? 如果未设置变量,则显示未定义用户错误信息
? 如果未设置变量,则显示系统错误信息
例如:
echo ${color:?} //这里会输出color: parameter null or not set 可以稍微改造下,让它输出更友好的信息 echo ${color:? "can't locate color"} //这样会输出:color: can't locate color
想让变量成为一个常量(在shell中称为只读变量)的方法是在变量前加上readonly修饰符
将变量导入环境变量的方法是使用export 变量名,清除它的方式是unset 变量名(这也同样适合于普通变量)