这篇文章介绍下BASH shell中的字符串处理的相关命令。之前有介绍过shell的其它命令,请参考:
Bash字符串也是一种数据类型,它用于表示文本而不是数字,它是一组可能还包含数字的字符的组合。如果数字想要表示为字符串,那么需要程序员用引号将数字包起来,以便Bash将数据视为字符串。BASH对字符串的操作有很多方式,以下记录了其中一些常用的用法。
1.字符串基本操作
字符串比较的命令有:
bash
# 等于运算符:用于检查两个字符串是否相等
语法:Operand1 = Operand2
# 不等于运算符:用于检查两个字符串不相等
语法:Operand1 != Operand2
# 小于运算符:是一个条件运算符,用于检查string1是否小于string2
语法:Operand1 \< Operand2
# 大于运算符:用于检查string1是否大于string2
语法:Operand1 \> Operand2
# 检查字符串长度是否大于零
语法:[ -n Operand ]
# 检查字符串长度是否等于零
语法:[ -z Operand ]
2. 字符串长度计算
字符串中的字符总数表示字符串的长度。我们有时需要判断字符串的长度才能执行特定任务。在Bash脚本中,可以使用以下几种方法来获取字符串的长度。
bash
# 方法1
${#str}
# 方法2
expr length "$str"
# 方法3
expr "$str" :'.*'
# 方法4
$str | wc -c
# 方法5
$str | awk '{print length}'
# 注意:请注意在$str周围使用双引号。如果字符串中包含空格,则双引号非常重
# 要。否则,可以忽略它。
例子如下
bash
# The script is:
str="str len"
echo "Method1:" ${#str}
length=`expr length "$str"`
echo "Method2:" $length
length=`expr "$str" : '.*'`
echo "Method3:" $length
length=`echo -n $str | wc -c`
echo "Method4:" $length
length=`echo -n $str | awk '{print length}'`
echo "Method5:" $length
# The result is:
Method1: 7
Method2: 7
Method3: 7
Method4: 7
Method5: 7
3. 拆分字符串
有时候需要根据分隔符来拆分字符串数据,bash没有直接的拆解字符串内置函数,但可以使用定界符在bash脚本中拆分字符串数据。分隔符可以是单个字符,也可以是包含多个字符的字符串。
我们可以使用IFS变量来拆分,`IFS是一个特殊的内部变量,用于将字符串拆分为单词。
IFS`变量称为"内部字段分隔符",它确定Bash如何识别边界。`IFS用于分配分隔字符串的特定定界符
[IFS ='']。空格是
IFS`的默认值。但是,也可以使用`\t`,`\n`,`-`等值作为分隔符。分配定界符后,可以通过两个选项读取字符串:`-r`和`-a`。即,`read -ra ARR <<< "str"。在这里,选项
-r用于定义反斜杠(
`),它是字符而不是转义字符。-a
选项用于定义将单词(用$IFS
分隔)分配给从零开始的数组顺序索引。然后,应用bash for
循环来访问列表,这些列表被拆分为一个数组。
例子如下:
bash
# The script is:
str="gabc,23ab,45,abc789abcend, jj kk"
IFS="," #setting "," as delimiter
read -ra array <<<"$str" #reading str as an array as tokens separated by IFS
declare -p array # print array content
# The result is:
declare -a array='([0]="gabc" [1]="23ab" [2]="45" [3]="abc789abcend" [4]=" jj kk")'
拆分字符串还有其它方式,这只是其中一种。
4. 提取子字符串
子字符串是字符串中的字符序列,Bash提供了一个从字符串提取信息的选项,可以使用多种方法提取数字或给定的字符串。字符串提取的语法为:
bash
${variable:offset:length}
# 其中:
# - variable是包含字符串的变量名称
# - offset用于指定从何处开始提取字符串的位置,也可以是负的,反向提取
# - length用于指定从偏移量开始执行的字符范围
# 分配长度是可选的。如果未提供length,则子字符串的结尾将是字符串的结尾
例子如下:
bash
# The script is:
str="welcome to the world"
echo ${str:0:10}
echo ${str:(-9)}
# The result is:
welcome to
the world
5. 连接字符串
将两个或多个字符串添加或连接在一起,这称为字符串连接。bash中字符串连接的格式为:
bash
# 方法1:
str3="$str1$str2"
# 此命令将串联str1和str2变量的值,并将其存储在第三个变量str3中
# 方法2:
newstr="${str} newstr"
# 此命令将字符串变量的值与其它字符串拼接在一起