【发布时间】:2021-01-22 09:50:52
【问题描述】:
你能帮我摆脱嵌套的 for 循环吗? 数组可能一直在变化,截至目前我需要添加/删除 for 循环。纯 bash 是否可以用更优雅的解决方案替换嵌套的 for 循环?
#!/bin/bash
i=0
array=(A B C)
places=3
word1=word1
word2=word2
arrC=${#array[*]}
while [ $i -lt $((arrC**places)) ]; do
for a in ${!array[*]}; do
for b in ${!array[*]}; do
for c in ${!array[*]}; do
echo "[$i] ${array[$a]}${word1}${array[$b]}${word2}${array[$c]}"
i=$((i + 1))
done
done
done
done
为简单起见,我制作了 ABC 数组。这是一个数组的更多真实示例: 数组=(I i L l | \ / 1 !)
【问题讨论】:
-
????您想在一个循环中处理 a/b/c 的所有组合吗?为什么?
-
代码试图做什么?
-
这可能很愚蠢,但有时我得到的密码写得不好,这是通过三手在纸上完成的。自己检查比得到答案要快。除此之外,有时制作这些密码的人并不记得他们自己写了什么。并且要重新制作它们需要额外的成本和时间。
-
可以使用 GNU Parallel 吗?
parallel -k echo {#} {1} {2} {3} ::: A B C ::: A B C ::: A B C -
这确实简化了代码
array=(A B C D E) && parallel -k echo {#} {1}word1{2}word2{3}word3 ::: ${array[*]} ::: ${array[*]} ::: ${array[*]}