📅  最后修改于: 2020-12-29 10:20:24             🧑  作者: Mango
在本主题中,我们定义了如何在bash shell脚本中拆分字符串。
在某些情况下,我们可能需要拆分字符串数据以执行某些特定任务。大多数编程语言都包含内置函数“ split”,可将任何字符串数据分为多个部分。但是,bash不包含此类内置函数。但是我们可以使用定界符在bash脚本中拆分任何字符串数据。分隔符可以是单个字符,也可以是具有多个字符的字符串。
查看以下方法,了解如何在bash shell中分割字符串:
以下是使用$ IFS在bash中拆分字符串的步骤:
让我们借助一些示例来了解这种机制:
在此示例中,使用空格字符定界符分割字符串。
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
输出量
如果我们输入字符串“ Javatpoint上欢迎您”,则输出将如下所示:
在某些情况下,我们可能需要用其他定界符(例如符号或特定字符)来分割字符串。在本示例中,使用逗号(,)符号字符作为分隔符来分割字符串。
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中,也可以在不使用$ IFS变量的情况下分割字符串。带-d选项的'readarray'命令用于拆分字符串数据。 -d选项适用于在命令中定义分隔字符,例如$ IFS。此外,bash循环用于以拆分形式print字符串。
让我们借助一些示例来了解此逻辑:
本示例定义了如何在不使用$ 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脚本
#!/bin/bash
#Example for bash split string by another string
str="WeLearnWelcomeLearnYouLearnOnLearnJavatpoint"
delimiter=Learn
s=$str$delimiter
array=();
while [[ $s ]];
do
array+=( "${s%%"$delimiter"*}" );
s=${s#*"$delimiter"};
done;
declare -p array
在此bash脚本中,我们使用了以下Parameter- Expansions:
输出量
在此示例中,我们使用trim(tr)命令分割字符串。 trim命令不是使用read命令,而是用于在定界符上拆分字符串。
Bash脚本
#!/bin/bash
#Example to split a string using trim (tr) command
my_str="We;welcome;you;on;javatpoint."
my_arr=($(echo $my_str | tr ";""\n"))
for i in "${my_arr[@]}"
do
echo $i
done
输出量
注意:应该注意的是,如果我们应用trim命令分割字符串,数组元素将在'space delimiter'上分割。例如,“ Windows OS”之类的元素将被视为两个不同的词。
在本主题中,我们演示了如何在bash脚本中使用不同类型的方案(或不使用定界符)拆分字符串。