在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 变量名(这也同样适合于普通变量)