4 ms·
Braces just evaluate and expand. $ echo {A,B} A B $ echo {A,B}{C,D} AC AD BC BD $ echo {A,B}{C,D}{E,F} ACE ACF ADE ADF BCE BCF BDE BDF
by carb 6y ago
Braces just evaluate and expand.
$ echo {A,B}
A B
$ echo {A,B}{C,D}
AC AD BC BD
$ echo {A,B}{C,D}{E,F}
ACE ACF ADE ADF BCE BCF BDE BDF
- jraph 6y agoWow, I had not realized that one could compute Cartesian products using a shell.
- foobarian 6y agoOn the topic of things you didn't know the shell did: I found out about sequences recently and love them: $ echo {0..19} 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ echo {00..19} 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
- pkaye 6y agoLooks like it also works with single letters. $echo {A..D} A B C D
- smcameron 6y agoHmm, I'd always used the "seq" command for that... $ echo `seq 0 19` 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
- m463 6y agowow, genius! (the second doesn't work on older versions of bash, like macos)
- perlwle 6y agoPerl is very much like this too. $ perl -le 'print join(" ", "00".."20")' 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
- tyingq 6y agoIt's also inside Perl as bsd_glob(). use File::Glob ':bsd_glob';
- mehrdadn 6y agoWell, using Bash. A lot of these tricks aren't portable so you'll have fun when your scripts break on e.g. Dash (Ubuntu).
- jraph 6y agoAlso works on zsh and fish, though fish does not enumerate in the same order. Indeed does not work on sh. Thanks for the heads up. Too bad it's not portable, but I guess this is mainly useful in an interactive shell. I mostly use #!/usr/bin/env sh, so my scripts will remain free of shell Cartesian products and other brace expansions.