Does there exist a Bash equivalent to concatenation from the Plan 9 rc shell

bashcommand linelinuxshell

In the Plan 9 rc shell,
one can write

echo (foo bar baz)^.c

to get

foo.c bar.c baz.c

or

echo (foo bar baz)^(.c .h .o)

to get

foo.c bar.h baz.o

Is there an equivalent to this in Bash?
Specifically,
is there a quicker way than
`for f in foo bar baz; do echo $f.c; done`
for the former,
and does such a method exist for the latter?

Best Answer

You can use brace expansion for the first case:

$ echo {foo,bar,baz}.c
foo.c bar.c baz.c

(Note: this doesn't work for lists stored in variables, because brace expansion takes place before variable expansion.)

But I don't think there's a way to get it to zipper two lists together (like Plan 9's echo (foo bar baz)^(.c .h .o)). If you use brace expansion with two lists, it gives you all possible combinations:

$ echo {foo,bar,baz}{.c,.h,.o}
foo.c foo.h foo.o bar.c bar.h bar.o baz.c baz.h baz.o
Related Question