在数组的循环中,向数组添加元素


9

我对bash中的for循环有问题。例如:我有一个数组("etc" "bin" "var")。我在这个数组上进行迭代。但是在循环中,我想将一些值附加到数组中。例如

array=("etc" "bin" "var")
for i in "${array[@]}"
do
echo $i
done

显示etc bin var(当然在单独的行上)。如果我这样追加do

array=("etc" "bin" "var")
for i in "${array[@]}"
do
array+=("sbin")
echo $i
done

我想要:(etc bin var sbin当然在单独的行上)。

这是行不通的。我该怎么做?


1
更改要迭代的对象始终是一个冒险的主张。通常是时候退后一步,考虑是否还有另一种可能有意义的方法
Eric Renouf 2015年

Answers:


6

追加“sbin目录”的3倍,因为它应该,但它不会遍历新增的“sbin目录” S在同一个循环。

在第二个示例之后:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin

是的,没错,但是我需要添加到同一循环中:)
damekr

for然后使用两个循环。首先执行添加操作,然后遍历结果。
PSkocik

1
我不明白为什么要在循环中附加sbin。仅将其追加一次就更有意义了:array+=(sbin); for i in ...
PSkocik

becouse在for循环,我必须检查,如果某些文件是由该for循环复制有一些内容..
damekr

5
set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

这将遍历您的列表,sbin有条件地添加到该列表的末尾,并将其包含sbin在可迭代的内容中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.