重击:变量的所有组合

dci*_*llo 5 unix bash combinations

我想生成一组变量的所有组合。

我得出以下结论:

a="A"
b="B"
c="C"
d="D"
e="E"
f="F"

echo {$a,$b,$c,$d,$e,$f} $a{$b,$c,$d,$e,$f} $b{$c,$d,$e,$f} $c{$d,$e,$f} $d{$e,$f} $e$f $a$b{$c,$d,$e,$f} $b$c{$d,$e,$f} $c$d{$e,$f} $d$e$f $a$b$c$d{$e,$f} $b$c$d$e$f $a$b$c$d$e$f
Run Code Online (Sandbox Code Playgroud)

这将产生以下输出:

A B C D E F AB AC AD AE AF BC BD BE BF CD CE CF DE DF EF ABC ABD ABE ABF BCD BCE BCF CDE CDF DEF ABCDE ABCDF BCDEF ABCDEF
Run Code Online (Sandbox Code Playgroud)

在bash中是否有更简洁,优雅的方法?

dib*_*ery 3

随着脚本

echo {'','a'}{'','b'}{'','c'}{'','d'}{'','e'}{'','f'}
Run Code Online (Sandbox Code Playgroud)

你会得到

 f e ef d df de def c cf ce cef cd cdf cde cdef b bf be bef bd bdf bde bdef bc bcf bce bcef bcd bcdf bcde bcdef a af ae aef ad adf ade adef ac acf ace acef acd acdf acde acdef ab abf abe abef abd abdf abde abdef abc abcf abce abcef abcd abcdf abcde abcdef
Run Code Online (Sandbox Code Playgroud)

虽然顺序不一样,但这可以满足您的需求。所以你可以使用

echo {'',$a}{'',$b}{'',$c}{'',$d}{'',$e}{'',$f}
Run Code Online (Sandbox Code Playgroud)

如果您不想{'',$x}在脚本中输入这么多内容,您甚至可以使用eval

eval `echo echo "{'',$"{a..f}"}" | sed 's/ //2g'`
Run Code Online (Sandbox Code Playgroud)