我在 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
它将要按应有的方式追加“sbin”3次,但它不会在同一循环中迭代新添加的“sbin”。
在第二个例子之后:
echo "${array[@]}"
#=> etc bin var sbin sbin sbin
答案2
set etc bin var
while [ "$#" -gt 1 ]
do [ "$1" = bin ] &&
set "$@" sbin
printf %s\\n "$1"
shift;done
这将迭代您的列表,sbin
有条件地附加到所述列表的末尾,并包含sbin
在可迭代的内容中。