名词定义
parameter:变量名,若有值,其为字符串,如abcxyz;不表示位置参数和数组的情况。
name:由字母数字和下划线组成,且以字母或下划线开头的字符串。
word:由若干字符组成的字符串(没有name定义中约束的一个字符串)。
pattern:模式,由特殊模式字符和其它字符组成。在pattern中,除了特殊模式字符,出现在模式中的其它字符代表其本身含义;特殊模式字符若要表示本身,需使用反斜杠\转义。
特殊模式字符,及其含义如下:
*,代表任何字符串,也包括空字符串。
?,代表任何单个字符。
[...],代表一组特定字符(字符类)。若左中括号[后紧跟感叹号!或尖号^,代表不在该组特定字符中。
变量赋值(字符串)
基本形式如下:
name=[value],若未提供value,变量名name表示的变量值为空字符串。
Bash中提供的变量扩展(Parameter Expansion),基本形式为${...},也可实现变量赋值,还能获取字符串长度,进行字符串截取,字符串替换,大小写转换。接下来逐一说明。
${...}会针对变量的未设置(unset),空值(空字符串),非空值3种状态进行处理。
基本形式如下(4种):
$:若变量parameter未设置或是空值,就返回word(变量parameter状态不变);否则返回变量parameter的非空值。
示例如下:
$ unset parameter
$ echo $
word
$ echo $parameter
$
$ parameter=""
$ echo $
word
$ echo $parameter
$
$ parameter="testing"
$ echo $
testing
$ echo $parameter
testing
$
$:若变量parameter未设置或是空值,就将word赋值给变量parameter,然后返回变量parameter的值(变量parameter状态发生改变,常用于设置默认值)。否则返回变量parameter的非空值。
示例如下:
$ unset parameter
$ echo $
word
$ echo $parameter
word
$ parameter=""
$ echo $
word
$ echo $parameter
word
$ parameter="testing"
$ echo $
testing
$ echo $parameter
testing
$:若变量parameter未设置或是空值,就输出word至STDERR(变量parameter状态不变);否则返回变量parameter的非空值。
示例如下:
$ unset parameter
$ echo $
-bash: parameter: word
$ echo $parameter
$
$ parameter=""
$ echo $
-bash: parameter: word
$ echo $parameter
$
$ parameter="testing"
$ echo $
testing
$ echo $parameter
testing
$:若变量parameter是非空值,就返回word(变量parameter原值不变);否则返回变量parameter原状态值。
示例如下:
$ unset parameter
$ echo $
$ echo $parameter
$
$ parameter=""
$ echo $
$ echo $parameter
$
$ parameter="testing"
$ echo $
word
$ echo $parameter
testing
字符串长度
基本形式如下:
${#parameter}
示例如下:
$ parameter="abcxyz"
$ echo ${#parameter}
6
两种字符串截取
1. 字符串位置截取
基本形式如下(2种):
$
$
其中offset,length为整数,且length要大于或等于0;当offset为负数时,:后面要有空格,区别于$形式。
示例如下:
$ parameter="abcxyz"
$ echo $
cxyz
$ echo $
cxy
$ echo $
cxyz
2. 字符串前后缀模式删除截取
基本形式如下(4种):
$:将变量的头部和模式进行最小匹配,将匹配到的部分删除。
$:将变量的头部和模式进行最大匹配,将匹配到的部分删除。
示例如下:
$ parameter="/etc/rc.d/init.d/functions"
$ echo $
/rc.d/init.d/functions
$ echo $
functions
$:将变量的尾部和模式进行最小匹配,将匹配到的部分删除。
$:将变量的尾部和模式进行最大匹配,将匹配到的部分删除。
示例如下:
$ parameter="/usr/local/mysql/bin/mysql"
$ echo $
/usr/local/mysql/bin
$ echo $
/usr/local
实现dirname,和basename的功能。
$ parameter="/etc/rc.d/init.d/functions"
$ dirname /etc/rc.d/init.d/functions
/etc/rc.d/init.d
$ echo $
/etc/rc.d/init.d
$ basename /etc/rc.d/init.d/functions
functions
$ echo $
functions
字符串替换
基本形式如下(4种):
$:将parameter中首次匹配到pattern的子串替换为string。
$:将parameter中所有匹配到pattern的子串替换为string。
示例如下:
$ parameter="/usr/local/mysql/bin/mysql"
$ echo $
/usr/local/basedir/bin/mysql
$ echo $
/usr/local/basedir/bin/basedir
$:将parameter开头匹配到pattern的子串替换为string。
$:将parameter结尾匹配到pattern的子串替换为string。
注,若string为空字符串(null string),将parameter中匹配到pattern的子串删除,pattern后的斜杠/可省略。
示例如下:
$ parameter="/usr/local/mysql/bin/mysql"
$ echo $
/opt/mysql/bin/mysql
$ echo $
/usr/local/mysql
大小写转换
基本形式如下(4种):
$:将parameter中首次匹配到pattern的小写字母转换为大写字母。
$:将parameter中所有匹配到pattern的小写字母转换为大写字母。
示例如下:
$ parameter="abcXYZ_246"
$ echo $
AbcXYZ_246
$ echo $
ABCXYZ_246
$:将parameter中首次匹配到pattern的大写字母转换为小写字母。
$:将parameter中所有匹配到pattern的大写字母转换为小写字母。
示例如下:
$ parameter="ABCxyz_135"
$ echo $
aBCxyz_135
$ echo $
abcxyz_135
每天进步一点点
领取专属 10元无门槛券
私享最新 技术干货