SHELL中有一些变量扩展的技巧,做下归纳总结mark
一、取子字符串
规则1:${变量名:位置起点}
含义:由指定的位置起点开始,截取子字符串到字符串结束,起点由0开始
例1:
var="12345678"
echo ${var:5}
输出:678
-------------------------------
规则2:${变量名:位置起点:长度}
含义:由指定的位置起点开始,截取指定长度的字符串,起点由0开始
例2:
var="12345678"
echo${var:0:5}
输出:12345
-------------------------------
二、计算字符串长度
规则:${#变量名称}
含义:表示返回变量名称的字符串长度
例1:
var="12345678"
echo ${#var}
输出:8
-------------------------------
三、取传入的位置参数
命令行参数:$0表示命令本身,$1表示第一个参数,$2表示第二个参数,依此类推,$@表示所有的参数
位置参数有:$0、$1、$2、$@
例1:$0表示命令本身
test.sh
#!/bin/bash
echo `basename $0`
echo `basename $0 .sh`
输出:
test.sh
test
-------------------------------
规则1:${@:起点}
含义:表示由起点开始,取得后面所有的位置参数
例2:
test.sh
!/bin/bash
echo ${@:1}
输出:1 2 3
-------------------------------
规则2:${@:起点:个数}
含义:表示由起点开始,取得指定个数的位置参数
例3:
test.sh
#!/bin/bash
echo ${@:1:1}
输出:1
-------------------------------
四、对比样式
规则1:${变量#样式}
含义:表示由变量值的最左边开始与样式进行对比,删除"最短相符合的字符串"
例1:
var="12345678"
echo ${var#*3}
输出:45678
-------------------------------
规则2:${变量##样式}
含义:表示由变量值的最左边开始与样式进行对比,删除"最长相符合的字符串"
例2:
var="12341234"
echo ${var##*3}
输出:4
-------------------------------
规则3:${变量%样式}
含义:表示由变量值的最右边或最后边开始与样式进行对比,删除"最短相符的字符串"
例3:
var="12341234"
echo ${var%3*}
输出:123412
-------------------------------
规则4:${变量%%样式}
含义:表示由变量值的最右边或最后边开始与样式进行对比,删除"最长相符的字符串"
例4:
var="12341234"
echo ${var%%3*}
输出:12
-------------------------------
五、替换或删除部分字符串
规则1:${变量/样式/替换字符串}
含义:如果变量中有符合样式的字符串,则使用替换字符串替代,只替换第一个符合样式的字符串
例1:
var="12341234"
echo ${var/1234/1111}
输出:11111234
-------------------------------
规则2:${变量//样式/替换字符串}
含义:如果变量中有符合样式的字符串,则使用替换字符串替代,替换全部符合样式的字符串
例1:
var="12341234"
echo ${var//123/}
输出:44
-------------------------------
六、要求样式在字符串开始或结尾
在对比样式时,在样式前加上"#"号,表示该样式要出现在变量值的开头才算符合
在对比样式时,在样式前加上"%"号,表示该样式要出现在变量值的结尾才算符合
例1:
var="12341234"
echo ${var/#1234/}
输出:1234
echo ${var/#234/} #不开头
输出:12341234
echo ${var/%234/}
输出:12341
echo ${var/%2341/}
输出:12341234
-------------------------------
七.取变量名称列表
规则:${!开头字符串@}或${!开头字符串*}
含义:把所有以指定字符串开头的变量名列出,各变量之间按空格分开
例1:
var="12345678"
var2=1
echo ${!var*}
输出:
var var2
-------------------------------
八.默认值类用法
${parameter-word} 若parameter变量未定义,则扩展为word。
${parameter:-word} 若parameter变量未定义或为空,则扩展为word。
例1:
echo ${var1-111}
输出111
-------------------------------
例2:
var1=""
echo ${var1:-111}
输出111