一、环境
ubuntu14.04 x86_64
二、变量默认值
2.1 ${vari:-defaultValue}
当var没有定义时,此时使用defaultValue, 而vari依然为空,没有改变值
eg:
在终端上操作
#echo ${name}
# //因为name没有定义,结果为空
#echo ${name:-chao ge}
#chao ge //没有定义name,使用默认值chao ge
#echo ${name}
# //依然为空,并未改并name变量的值
2.2 ${vari:=defaultValue}
当vari没有定义时,此时使用defaultValue, 同时vari也被赋值为defaultValue
eg:
在终端上操作
#echo ${name}
# //因为name没有定义,结果为空
#echo ${name:=chao ge}
#chao ge //没有定义name,使用默认值chao ge
#echo ${name}
#chaoge //name变量的值已经被改变
2.3 ${vari:?value}
当vari没有定义时,或者定义了值为空,将在终端报错并且退出,用于检查是否定义以及是否为空
eg.
>echo ${name}
> //因为没有定义name,所以输出为空
>echo ${name:?zhangsan}
>bash: name: zhangsan //因为没有定义name,报错并退出
>echo ${name:?}
>bash: name: 参数为空或未设置
>name= //定义name变量,但是值为空
>echo ${name:?}
>bash: name: 参数为空或未设置
>name=lisi //设置了name的值
>echo ${name:?}
>lisi //正常输出name的值
2.4 ${vari:+value}
当vari定义并且不为空,将用value替换vari的值,否则什么也不做, 与${vari:-value}相反
eg:
>echo ${myhome:+beijing}
> //因为没有定义myhome,所以为空
>myhome= //定义myhome,但为空
>echo ${myhome:+beijing}
>
>myhome=shanghai //设置变量的值
>echo ${myhome:+beijing}
>beijing //此时myhome定义了并且不为空,则替换为beijing了
三、应用
3.1 Makefile
eg: linux内核中其中一个Makefile中的
#Default value
head-y := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
textofs-y := 0x00008000
3.2 函数默认参数
和c++的默认参数异曲同工之妙
default_parameters.cpp
#include<iostream>
void func(int i=1, double d=2.0, float f=3.0)
{
std::cout << i <<", " <<d <<", " << f << std::endl;
}
int main(int argc, char *args[])
{
func();
func(10);
func(10, 99.9);
func(20, 33.3, 9.3f);
return 0;
}
#g++ default_parameters.cpp
# ./a.out
1, 2, 3
10, 2, 3
10, 99.9, 3
20, 33.3, 9.3
default_parameters.sh
#!/bin/bash
func()
{
echo "${1:-10}, ${2:-10.2}, ${3:-zhangsan}"
}
func
func 23
func 23 12.0
func 34 23.0 lisi
#bash default_parameters.sh
10, 10.2, zhangsan
23, 10.2, zhangsan
23, 12.0, zhangsan
34, 23.0, lisi
这样就可以让函数呈现多态性
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。