Bash 3.00 brace expansion

by: Tony Lawrence

Bash 3.00 brace expansion

Ah, finally: no more of

for i in 1 2 3 4 5 6 7 8 9 0

do
.. whatever
done

With Bash 3.0, we now have brace expansion for lists:

for i in {1..10} ; do echo $i ; done

Prior to this, we sometimes used "seq", which could result in such awful things as:

for i in `seq 65 69`; do echo -e `printf '\\%03o' $i`; done

Ugly. The Bash 3.0 way is so much cleaner:

for i in {A..E}; do echo $i;done

This also works for more traditional brace expansion use:

$  echo foo{1..4}bar

foo1bar foo2bar foo3bar foo4bar
# used to be done as
$ echo foo{1,2,3,4}bar
foo1bar foo2bar foo3bar foo4bar


Nesting of course still works:

echo foo{bar{1..3},-is-done}

foobar1 foobar2 foobar3 foo-is-done

and you can use it for such tasks as:

mkdir {A..D}{1..3}{0-9}

which would have required nested loops before Bash 3.0



Article published Tuesday, 4th October 2005
© 2008 NetVisits, Inc. All rights reserved.