Bash Brace Expansion
on May 30, 2008
Bash brace expansion is used to generate stings at the command line or in a shell script. The syntax for brace expansion consists of either a sequence specification or a comma separated list of items inside curly braces "{}". A sequence consists of a starting and ending item separated by two periods "..".
Some examples and what they expand to:
{aa,bb,cc,dd} => aa bb cc dd {0..12} => 0 1 2 3 4 5 6 7 8 9 10 11 12 {3..-2} => 3 2 1 0 -1 -2 {a..g} => a b c d e f g {g..a} => g f e d c b aIf the brace expansion has a prefix or suffix string then those strings are included in the expansion:
a{0..3}b => a0b a1b a2b a3bBrace expansions can be nested:
{a,b{1..3},c} => a b1 b2 b3 c
Counted loops in bash can be implemented a number of ways without brace expansion:
# Three expression for loop:
for (( i = 0; i < 20; i++ ))
do
echo $i
done
# While loop:
i=0
while [[ $i -lt 20 ]]
do
echo $i
let i++
done
# For loop using seq:
for i in $(seq 0 19)
do
echo $i
done
for i in {0..19}
do
echo $i
done
for i in {a..z}
do
echo $i
done
Brace expansion can also be useful when passing multiple long pathnames to a command. Instead of typing:
# rm /a/long/path/foo /a/long/path/barYou can simply type:
# rm /a/long/path/{foo,bar}
Brace expansion is enabled via the "set -B" command and the "-B" command line option to the shell and disabled via "set +B" and "+B" on the command line.