shell 变量默认值
一、环境
ubuntu14.04 x86_64
二、变量默认值
2.1 ${vari:-defaultValue}
当var没有定义时,此时使用defaultValue, 而vari依然为空,没有改变值
eg:
在终端上操作
#echo${name}#//因为name没有定义,结果为空#echo${name:-chaoge}#chaoge//没有定义name,使用默认值chaoge#echo${name}#//依然为空,并未改并name变量的值
2.2${vari:=defaultValue}
当vari没有定义时,此时使用defaultValue, 同时vari也被赋值为defaultValue
eg:
在终端上操作
#echo${name}#//因为name没有定义,结果为空#echo${name:=chaoge}#chaoge//没有定义name,使用默认值chaoge#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中的
#Defaultvaluehead-y:=arch/arm/kernel/head$(MMUEXT).oarch/arm/kernel/init_task.otextofs-y:=0x00008000
3.2 函数默认参数
和c++的默认参数异曲同工之妙
default_parameters.cpp
#include<iostream>voidfunc(inti=1,doubled=2.0,floatf=3.0){std::cout<<i<<","<<d<<","<<f<<std::endl;}intmain(intargc,char*args[]){func();func(10);func(10,99.9);func(20,33.3,9.3f);return0;}
#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/bashfunc(){echo"${1:-10},${2:-10.2},${3:-zhangsan}"}funcfunc23func2312.0func3423.0lisi
#bash default_parameters.sh
10, 10.2, zhangsan
23, 10.2, zhangsan
23, 12.0, zhangsan
34, 23.0, lisi
这样就可以让函数呈现多态性
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。