1

我为 bash 找到了类似的答案,但对于 sh 却没有,所以我在问。

我有一个 $STRING,其中包含类似“Jun01 Jun02 Jun03 Jun04”的内容。我想把它放入一个数组中,使得 ${ARRAY[0]} 是“Jun01”,${ARRAY[1]} 是“Jun02”,等等。

我怎样才能做到这一点?谢谢你。

4

3 回答 3

2

您不能真正在标准 (Bourne) shell 中本地处理数组。

有关更多详细信息,请参见此处

C shell (47.5)、awk (33.11)、Korn shell 和其他一些 UNIX 命令解释器具有内置的数组支持。标准的 Bourne shell 没有,尽管它的命令行是一种数组,您可以使用 set ( 44.19 ) 命令存储它 - 并通过 $1 、 $2 等获取存储的值。

我会尝试使用 bash(如您所见)或更全功能的脚本语言,例如Perl(毫无疑问,其他人会推荐他们的最爱!)

于 2012-07-10T17:01:32.210 回答
1

sh 没有数组,但以下 hack 通常就足够了:

set $STRING
for x; do eval "ARRAY_$((i++))='$x'"; done

现在,(假设i未设置或以 0 开头),$ARRAY_0具有值Jun01$ARRAY_1isJun02等。

于 2012-07-10T17:32:06.970 回答
1

您可以摆脱位置参数:它们类似于数组。

set -- $STRING   # no quotes here
echo $1
echo $2
# etc
于 2012-07-11T00:55:36.247 回答