Bash编程中的字符串处理

名词定义

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

每天进步一点点

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181125G0GVRX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券