string1='Hello World'
string2="'Twas brillig, and the slithy toves
Did gyre and gimble in the wabe:
All mimsy were the borogoves,
And the mome raths outgrabe."
array=( "$string1" "$string2" )
printf '%s\n' "${array[1]}"
上面的脚本片段打印出 Lewis Carroll 的诗歌 Jabberwocky 的第一节。它不会打印Hello World,因为我们选择输出数组的第二个元素,而不是第一个。第二个元素是由字符组成的单个字符串。其中一些字符恰好是换行符和空格,但这仅用于演示目的。
不,前者不是数组。
例如,您不能使用索引来选择成员:
您可以使用数组来传递参数,但不能使用字符串。使用包含空格的元素以获得更好的效果:
输出:
man bash
包含两种变量类型的描述,无需谷歌搜索。以换行符分隔的子字符串字符串与字符串数组不同。一个是字符串;另一个包含字符串。
通过在字符串中包含换行符将字符串分成几行这一事实对字符串的存储没有特别的意义。shell 无法在行上对其进行索引,并且单行不能包含嵌入的换行符而不以某种方式对其进行编码。
该数组是一组有序的单独字符串。每个字符串都可以通过数组的索引立即访问。单个数组元素可以包含任何标准字符串,带或不带换行符或其他定界字符(
bash
shell 中的 nul 字符除外)。但是,一个数组元素不能是另一个数组,因为bash
不支持多维数组。上面的脚本片段打印出 Lewis Carroll 的诗歌 Jabberwocky 的第一节。它不会打印
Hello World
,因为我们选择输出数组的第二个元素,而不是第一个。第二个元素是由字符组成的单个字符串。其中一些字符恰好是换行符和空格,但这仅用于演示目的。要从第二个数组元素中的诗歌中仅输出一行或任何其他子字符串,我们需要使用一些实用程序来解析字符串。从字符串中提取单个以换行符分隔的子字符串与 shell 中数组的概念没有任何关系。