设为首页 加入收藏

TOP

shell变量操作详解
2017-11-28 09:14:11 】 浏览:170
Tags:shell 变量 操作 详解

一、变量初始化以及默认值设置


1.$var与${var}:这两种写法本质上是一样的,但$var有时候会产生混淆,而${var}一般不会,可以把变量和字符串组合起来使用,比如name=${first}-on-${last}


2.${var-default}与${var:-default}:


(1)${var-default}:如果变量var没有被声明,那么就使用默认值,否则就是用var初始化的值


例子1:


echo ${a-default} #结果为default


 


例子2:


a=


echo ${a-default} #结果为空


 


例子3:


a="test"


echo ${a-default} #结果为test


 


(2)${var:-default}:如果变量var没有被声明或者已经声明,但是赋值为空,那么就使用默认值,否则就使用var初始化的值


例子1:


echo ${a:-default} #结果为default


 


例子2:


a=


echo ${a:-default} #结果为default


 


例子3:


a="test"


echo ${a:-default} #结果为test


(另外的写法:${parameter=default}与${parameter:=default}与上述的两个是一样的)


 


3.${var+alt_value}与${var:+alt_value}


(1)${var+alt_value}:如果变量var被声明了, 无论var的值为空或者var初始化为一个值,都使用alt_value, 如果没有声明就为空.


例子1:


echo ${a+alt_value} #结果为空


 


例子2:


a=


echo ${a+alt_value} #结果为alt_value


 


例子3:


a="test"


echo ${a+alt_value} #结果为alt_value


 


(2)${var:+alt_value}:如果变量var被初始化为一个非空的值, 那么就使用alt_value, 如果没有被声明或者已声明但初始化为空值就为空


例子1:


echo ${var:+alt_value} #结果为空


 


例子2:


a=


echo ${var:+alt_value} #结果为空


 


例子3:


a="test"


echo ${var:+alt_value} #结果为alt_value


 


4.${parameter?err_msg}与${parameter:?err_msg}


(1)${var?err_msg}:如果var已经被声明,那么就使用设置的值,否则打印err_msg错误消息。


例子1:


echo ${var?err_msg} #结果为报错退出,打印出错误信息:err_msg


 


例子2:


a=


echo ${var?err_msg} #结果为空


 


例子3:


a="test"


echo ${var?err_msg} #结果为test


 


(2)${parameter:?err_msg}:如果parameter已经被初始化为一个非空的值, 那么就使用设置的值, 否则打印err_msg错误消息。


例子1:


echo ${var:?err_msg} #结果为报错退出,打印出错误信息:err_msg


 


例子2:


a=


echo ${var:?err_msg} #结果为报错退出,打印出错误信息:err_msg


 


例子3:


a="test"


echo ${var:?err_msg} #结果为test


二、变量长度/子串删除(此点与shell字符串操作的“削除指定子串”项一样)


三、变量子串替换(位置从1开始)


1.${var:pos}:删除变量pos位置之前的字符。


2.${var:pos:len}:从位置pos开始, 截取变量的len个字符。


3.${var/Pattern/Replacement}:使用Replacement来替换变量var中第一个匹配Pattern的字符串。


4.${var//Pattern/Replacement}:所有在变量var匹配Pattern的字符串, 都会被替换为Replacement。5.


5.${var/#Pattern/Replacement}:如果变量var从开头开始的字符能匹配Pattern, 那么就使用Replacement来替换匹配到Pattern的字符串,否则保存var不变


6.${var/%Pattern/Replacement}:如果变量var的后缀匹配Pattern, 那么就使用Replacement来替换匹配到Pattern的字符串


例子1:


a="abcdefg"


echo ${a/#abc/1} #结果为1defg


 


例子2:


a="abcdefg"


echo ${a/#bc/1} #没有匹配开头字符a,所以结果为abcdefg


 


例子3:


a="abcdefg"


echo ${a/%efg/1} #结果为abcd1


 


例子4:


a="abcdefg"


echo ${a/%ef/1} #没有匹配结尾字符g,所以结果为abcdefg


7.${!varprefix*}与${!varprefix@} =》 匹配所有之前声明过的, 并且以varprefix开头的变量


例子:


test_a="abcdefg"


test_b="teyfh"


test_c="sdsrer"


var=${!test*}


echo "var=${var}" #结果为var=test_a test_b test_c


四、指定变量的类型:使用declare或者typeset(这两个是完全一样的内建命令,允许指定变量的具体类型)


1.“-r”:指定变量是只读的


2.“-i”:指定变量的类型是整型


3.“-a”:指定变量的类型是数组


4.“-f”:指定变量的类型是函数(如果直接执行declare -f,就会列出前面所定义的函数)


5.“-x”:声明一个变量, 并作为这个脚本的环境变量被导出


五、变量的间接引用


例子:


a=b


b=c


eva l a=\$$a #间接引用


或者使用a=${!a}


echo $a #结果为c


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇SpringMVC 控制器默认支持GET和PO.. 下一篇C++中的struct与class关键字

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目