【发布时间】:2018-08-21 15:09:45
【问题描述】:
我有一个使用大括号扩展的程序:
for X in {a..z}
do echo $X;
done
我想用提供的数字增加大括号扩展中使用的字母数量。例如,如果提供了数字 3:
for X in {a..z}{a..z}{a..z}
do echo $X;
done
如果提供数字 5:
for X in {a..z}{a..z}{a..z}{a..z}{a..z}
do echo $X;
done
如何在 bash 中做到这一点?
【问题讨论】:
-
你不能,而且你几乎肯定不想这样做。表达式立即展开,然后开始迭代。
{a..z}{a..z}{a..z}{a..z}{a..z}首先在内存中扩展到近1200万个字符串;它不是一个惰性生成器。 -
替代方案:使用嵌套的 for 循环。将您当前拥有的 for 循环嵌套在另一个或两个循环下。
-
你只是想生成所有可能的 n 个字母组合,还是真的想用这个来做其他事情?
-
@AlexM 我正在制作一个小蛮力来取乐,这将允许我获得一组特定字母的所有排列
-
这在 Python 中可能会更容易,使用
itertools.permutations和string.ascii_lowercase。
标签: bash brace-expansion