我需要迭代一个数组并在迭代过程中扩展该数组。如何在 BASH 中执行此操作?
例如:
req="a b c d"
read -a MODULES <<<$req
for MODULE_NAME in "${MODULES[@]}"; do
echo $MODULE_NAME
if something-happens-only-one-time; then
MODULES+=( "e" )
fi
done
我想要获得以下输出:
a
b
c
d
e
编辑:
以下代码目前有效:
i=0
while true; do
MODULE_NAME="${MODULES[$i]}"
echo ${MODULE_NAME}
if something-happens-only-one-time; then
MODULES+=( "e" )
fi
i=$((i+1))
num_of_modules=${#MODULES[@]}
if (("$i" >= "$num_of_modules")) ; then
break
fi
done
答案1
它不适用于for ... in "${arr[@]}"
循环,因为"${arr[@]}"
它会立即求值。也就是说,即使你在循环过程中向其中添加元素,循环的范围也已经确定,不会受到影响。
您可以将其重写为计数for
循环:
for ((i = 0; i < "${#MODULES[@]}"; i++)); do
MODULE_NAME=${MODULES[$i]}
echo $MODULE_NAME
if something-happens-only-one-time; then
MODULES+=( "e" )
fi
done
这是可行的,因为${#MODULES[@]}
循环条件在每个循环周期中都会重新评估。因此,在循环期间附加一个值后,在下一个循环开始时,的值${#MODULES[@]}
将增加 1。