有人知道这是什么问题,为什么它不希望将函数中的所有置换都添加到数组“ array”中,而当我运行循环时,我只能得到最后一个值
#!/bin/bash
array=()
permutation() {
local items="$1"
local out="$2"
local i
[[ "$items" == "" ]] && array[$i]="$out" && return
for (( i=0; i<${#items}; i++ )) ; do
permutation "${items:0:i}${items:i+1}" "$out${items:i:1}"
done
}
permutation $1
for i in "${array[$i]}"
do
echo "$i"
done
答案 0 :(得分:0)
array+=( "$out" )
可以附加到数组的末尾,而无需知道该值的索引。因为您是在本地声明i
,所以不会在函数调用之间共享它,因此它们都将覆盖${array[0]}
。for i in "${array[$i]}"; do
会忽略数组中所有值,除了位于$i
位置的那个值之外,对于{em>之前中存在的i
的单个值进入{1}}循环。使用for
遍历数组中的所有值。查看在https://ideone.com/zIYigA上运行的代码的更正版本