0

所以是的,通常你会使用 for 循环或类似的方法来增加一个数组,但在这种情况下,这是不可能的,因为我已经在一个循环中并且只需要在数组中设置一个值并继续前进。这是代码:

n=1
cat databases/$IPS | grep -v \# | while read LINE; do
  ENDPOINT[$n]="`echo $LINE | cut -d":" -f1`";
  echo "TESTING: ${ENDPOINT[$n]}"
  let n++
done

因此,while 循环将从平面文件数据库中读取几行,并将第一个冒号分隔值拉出,该值需要存储在数组中。由于在这个项目上工作太久,事情变得越来越混乱。我可能不得不重新考虑这部分。

所以官方的问题是,在不使用另一个循环的情况下,如何使用变量增加元素,以便我可以在当前的 while 循环中设置数组。

- - - 更新 - - -

我知道我试图做的事情似乎有点奇怪和不正统。因此,while 循环逐行读取数据库。在 while 循环的第一次迭代期间,数据库被读取,并且数据库第一行上的第一个“单元”作为数组元素 1 存储到数组中(或者可能是 0,没关系)。然后while循环返回第二遍,并拉取数据库中第二行的第一个单元格,它需要将其存储到元素2下的数组中。循环继续执行此操作直到数据库结束。

所以我知道如何使用循环读取数组的内容,但我从未使用循环设置数组。我无法让数组中的元素编号递增,因此当 while 循环进行下一次传递时,它不仅会继续覆盖 array[1]

这有帮助吗?

- - - 更新 - - -

所以看起来这有点工作。将这个数据库值存储在这个数组中的全部意义在于,它不仅在这个 while 循环中使用(省略了不相关的代码)。但我需要在脚本的其他地方使用这些值。

cat 数据库/$IPS | grep -v # | 一边读线;做 VAR=" echo $LINE | cut -d"|" -f1"; ENDPOINT[$n]="$VAR" echo "这里是数组变量:${ENDPOINT[$n]}" 完成

问题仍然是它似乎并没有真正存储到数组中。它只是覆盖数组中的第一个元素。如果我尝试在脚本中的某处回显任何较低的数组值,那么唯一出现的是数组元素 0 中的值并将其设置为数据库中的最后一个条目。

4

2 回答 2

0

我似乎是您正在执行一个命令,可能这是一个单独的进程,并且数组在完成时会丢失

改为这样做:

n=1
endpoints=`grep -v \# databases/$IPS | cut -d":" -f1`
for i in $endpoints; do
  ENDPOINT[$n]=$i;
  echo "TESTING: ${ENDPOINT[$n]}"
  let n++
done
于 2013-04-13T09:36:26.453 回答
0

没有百分百理解你的问题。我假设您无法访问 while 循环之外的数组元素。

这是因为whilecat命令上下文中执行,即作为单独的进程启动。要访问您的数组元素,您必须在相同的 bash 上下文中设置它们的值。

例如,您可以使用 sed 获取第一个冒号分隔值并处理注释:

file_name=data

# extract values and put it into bash array
ENDPOINT=(`sed 's/[ \t]*#.*//g;s/^\([^:]*\):.*/\1/g' $file_name`)

echo "size: ${#ENDPOINT[@]}"
echo "readed data: ${ENDPOINT[@]}"

此外,这个变体比循环快得多,while read循环调用另一个命令。

于 2013-04-13T09:14:44.610 回答