当你在Linux系统中编写bash脚本时,你可能会发现自己在很多情况下必须将字符串值分割成数组或其他数据结构。在这里,你必须清楚,bash并没有为我们提供内置的分割函数来分割任何字符串。但是总有一种方法可以解决这种问题。因此,我们将使用定界符来转换或分割一些字符串为数组。让我们开始看一下Ubuntu 20.04中的一些例子。首先使用桌面上的 "Ctrl+Alt+T "打开shell终端。
例1
我们在shell中声明了一个 "str "变量,里面有一个字符串值。在这里,我们用 "IFS "变量作为分隔符来分割一个字符串 "str"。分隔符 "IFS "包含 "空格 "作为其值。这意味着字符串将使用其值之间的空格分割成一个数组。现在,这里使用 "for "循环来遍历字符串 "str"。在 "do "子句中,"str "变量的每个元素都将显示为一个数组。循环结束后,终端以数组的形式显示字符串,如下图所示。

例2
让我们再来看看另一个例子,以获得一点不同的输出。你可以清楚地看到,这个字符串中的每个词后面都包含", "字符。这个特殊字符将被用作分隔符。因此,我们将", "声明为 "IFS "变量的一个值。
在这里,"for "循环再次被初始化,以遍历字符串变量 "str"。在 "for "循环的 "do "子句中,使用echo语句分别显示每个单词的索引号,并以 "IFS "变量值分隔。循环结束后,程序以数组的形式分别显示字符串的每个字。字符", "负责这种字符串值之间的分割。结果,我们从一个字符串变量 "str "中得到5个数组形式的值。

例3
让我们再来看看在bash文件中把字符串分割成一个数组的例子。所以,你必须创建一个bash文件 "test.sh",在shell中进行触摸查询,如下所述。
$ touch test.sh

现在,在一个编辑器中打开新创建的文件,在其中写一个bash脚本。我们一直在使用 "GNU Nano "编辑器来实现这一目的。你也可以使用vim编辑器。
$ nano test.sh

在bash文件中,我们首先添加了bash扩展名,以使这段代码可以用shell中的bash命令执行。之后,我们声明了一个变量 "str",并在其中初始化了一个长字符串值。变量 "IFS "已经被声明并分配了一个值 "space"。这里使用了read语句,在"-ra "标志的帮助下,将字符串变量 "str "中的数据读成一个数组,并保存到新的变量 "Arr "中。
echo语句计算并显示 "Arr "变量的大小,也就是数组。for "循环在此对数组值,即 "Arr "的值进行迭代,并使用printf语句在shell中显示。程序在此结束。用 "Ctrl+S "保存你的代码,用 "Ctrl+X "快捷键退出编辑器。

用bash命令和bash文件的名称,即 "test.sh",运行你新创建的bash脚本。bash脚本的执行首先显示一个字符串 "str "的大小,即数组。之后,终端以数组的形式显示一个字符串变量的值,即每个字都是分开的。一共有9个词被显示在shell上,如下图所示。
$ bash test.sh

例4
让我们再做一个将字符串分割成数组的说明。所以,打开同一个代码文件,更新字符串变量 "str"。我们在字符串中添加了6个单词,用逗号隔开。这个逗号将被用作 "IFS "变量中的分隔符。读取语句已经将字符串 "str "中的单词作为一个数组分别读取,并将每一个单词保存到变量 "Arr "中。分隔符在这里起作用,将每个字从字符串中分离出来。
这里使用了6个echo语句来显示 "Arr "变量的每一个值,使用的是单词的索引。你可以在图中看到通过索引获取每个值的语法。

在bash查询的帮助下在shell中运行该代码后,我们得到了6行输出。字符串的每个词都被分别保存在数组变量 "Arr "中,并在索引的帮助下显示出来。
$ bash test.sh

例5
让我们来看看最后一个将字符串值分割成数组的例子。这一次,我们不使用 "IFS "变量作为分隔符来分割字符串。我们将使用 "tr "标志来实现。因此,在Nano编辑器中打开文件 "test.sh "来更新它。在第一行添加bash扩展名。
字符串类型变量 "str "已经被初始化。 另一个变量 "Arr "已经使用了变量 "str "的值,并通过使用 "tr "标志将其分割成若干部分。tr "分隔符包含空格作为其值。for "循环在索引的帮助下对变量 "Arr "的值进行迭代。每个值都将以数组的形式单独显示。

运行bash代码后,我们得到了一个数组形式的结果。字符串 "str "中的每个字都被分离出来,并被转换成一个独立的值,即数组元素。
$ bash test.sh

结语
在这篇文章中,我们讨论了几个将字符串值分割成数组的例子。为了这个目的,我们使用了分隔符 "IFS "变量和 "tr "方法。所有的例子都很容易理解,并且可以毫无问题地实施。