Bash教程

Bash 拆分字符串

Bash 拆分字符串

在本主题中,我们定义了如何在 bash shell 脚本中拆分字符串。
在某些情况下,我们可能需要拆分字符串数据以执行某些特定任务。大多数编程语言都包含内置函数"split",可将任何字符串数据分成多个部分。但是,bash 不包含此类内置函数。但是我们可以使用分隔符来分割 bash 脚本中的任何字符串数据。分隔符可以是单个字符或包含多个字符的字符串。
查看以下方法以了解如何在 bash shell 中拆分字符串:

使用 $IFS 变量拆分

以下是使用 $IFS 在 bash 中拆分字符串的步骤:
$IFS 是一个特殊的内部变量,用于将字符串拆分为单词。 $IFS 变量称为"内部字段分隔符",它决定了 Bash 如何识别边界。 $IFS 用于分配特定的分隔符 [ IFS=' <分隔符> ' ] 用于分割字符串。空白是 $IFS 的默认值。但是,我们也可以使用"\t"、"\n"、"-"等值作为分隔符。 分配分隔符后,可以通过两个选项读取字符串: '-r' 和'-a'。即,read-ra ARR <<<"$str"。
这里,选项 '-r' 用于定义反斜杠(\) 是一个字符而不是转义字符。 '-a' 选项用于定义将单词(由 $IFS 分隔)分配给从零开始的数组的顺序索引。
然后我们应用 bash 'for' 循环来访问被拆分成数组的令牌。
让我们通过一些例子来理解这个机制:

例子1: Bash Split String by Space

在这个例子中,一个使用空格字符分隔符分割字符串。
Bash 脚本
#!/bin/bash
#Example for bash split string by space
read-p "Enter any string separated by space: " str  #reading string value
IFS='' #setting space as delimiter
read-ra ADDR <<<"$str" #reading str as an array as tokens separated by IFS
for i in "${ADDR[@]}"; #accessing each element of array
do
echo "$i"
done
输出
如果我们输入一个字符串"We Welcome you on lidihuo",输出将如下所示:
Bash Split String

示例 2: Bash 按符号拆分字符串

在某些情况下,我们可能需要通过其他分隔符(例如符号或特定字符)拆分字符串。在此示例中,使用逗号(,) 符号字符作为分隔符分割字符串。
Bash 脚本
#!/bin/bash
#Example for bash split string by Symbol (comma)
read-p "Enter Name, State and Age separated by a comma: " entry #reading string value
IFS=',' #setting comma as delimiter
read-a strarr <<<"$entry" #reading str as an array as tokens separated by IFS
echo "Name : ${strarr[0]} "
echo "State : ${strarr[1]} "
echo "Age : ${strarr[2]}"
输出
Bash Split String

不使用 $IFS 变量进行拆分

在 bash 中,也可以不使用 $IFS 变量来拆分字符串。带有-d 选项的 'readarray' 命令用于拆分字符串数据。-d 选项用于定义命令中的分隔符,如 $IFS。此外,bash循环用于以拆分形式打印字符串。
让我们借助一些示例来理解此逻辑:

示例1: Bash Split String by Symbol

此示例定义了如何在不使用 $IFS 的情况下拆分字符串值。根据脚本,应输入带有冒号(:) 符号的文本值,以便将其拆分。查看下面的 bash 脚本:
Bash 脚本
#!/bin/bash
#Example for bash split string without $IFS
read-p "Enter any string separated by colon(:) " str #reading string value
readarray-d :-t strarr <<<"$str" #split a string based on the delimiter ':'
printf "\n"
#Print each value of Array with the help of loop
for (( n=0; n < ${#strarr[*]}; n++ ))
do
echo "${strarr[n]}"
done
输出
Bash Split String

示例 2: Bash 将字符串拆分为另一个字符串

在此示例中,我们使用了已完成参数扩展的惯用表达式。
Bash 脚本
#!/bin/bash
#Example for bash split string by another string
str="WeLearnWelcomeLearnYouLearnOnLearnlidihuo"
delimiter=Learn
s=$str$delimiter
array=();
while [[ $s ]];
do
array+=( "${s%%"$delimiter"*}" );
s=${s#*"$delimiter"};
done;
declare-p array
在这个 bash 脚本中,我们使用了以下参数扩展:
${parameter%%word}
删除最长匹配的后缀模式。
${parameter#word}
删除最短匹配前缀模式。
输出
Bash Split String

示例 3: 使用 Trim 命令的 Bash 拆分字符串

在此示例中,我们使用了 trim(tr) 命令来拆分字符串。不是使用 read 命令,而是使用 trim 命令在分隔符上拆分字符串。
Bash Script
#!/bin/bash
#Example to split a string using trim (tr) command
my_str="We;welcome;you;on;lidihuo."
my_arr=($(echo $my_str | tr ";""\n"))
for i in "${my_arr[@]}"
do
echo $i
done
输出
Bash Split String
注意: 需要注意的是,如果我们应用trim命令来分割字符串,数组元素是在'空格分隔符'上分割的。例如,像"Windows OS"这样的元素将被视为两个不同的词。

结论

在本主题中,我们演示了如何在使用或不使用分隔符的情况下使用不同类型的场景在 bash 脚本中拆分字符串。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4