当需要快速访问多个数组中的元素时,在 bash 和 ksh93 中使用数组的能力非常方便。这是一个简单的例子:
#!/bin/ksh93 --
array1=(1 2 3 4 5 6 7)
array2=(8 9 10 11 12 13 14)
printf '%s\n' "Third element of array1 is ${array1[2]} and fifth element of array2 is ${array2[4]}"
我记得顺便读到,数组不包含在 POSIX 标准中的至少部分原因是这样做会破坏一些东西。这是真的?什么东西会坏掉?
答案1
我不知道你指的是什么文本,但我很确定情况并非如此,因为bash
和ksh93
应该符合 POSIX 标准,如果数组确实导致 POSIX shell 损坏,那么这些 shell 将不符合。
然而,这并不意味着 POSIX 可能包含它们。首先,bash
可能ksh93
不会以相同的方式实现数组,并且 POSIX 不希望指定在广泛部署的历史实现中表现不同的功能。
其次,POSIX 通常不会指定很多功能。直到现在才出现了 require 的提案local
,它被广泛部署在几乎所有开源 POSIX shell 中,除了ksh93
.同样,可以使用vi
仅实现 POSIX 功能的实现,但大多数用户会发现它的功能非常稀疏。
最后,POSIX 更喜欢标准化大多数实现中已经可用的东西,而 shell 数组不是这样的东西。 dash
缺少它们,大多数与其共享血统的 shell 以及诸如busybox
.一个完整的 POSIX 环境可能相对较小,这对于需要使用嵌入式系统的人来说非常方便,因此为了简单起见,通常会省略一些有用的东西。
另请注意,广泛部署的开源实现具有某种功能并不意味着商业 Unix 环境也具有该功能。即使 POSIX 在新版本中指定数组,所有这些系统也需要很多年才能更新以支持它们。