The Magical Expanding configuration

25 May 2005 • 1 min read

As requested via a bug report, network configuration now supports bash expansion. This will make giving servers multiple IP addresses a snap. Here's an example

config_eth0=( "192.168.0.{1..20}/24 brd +" ) gives you 20 IP addresses.

config_eth0=( "192.168.{1..20}.{1..20}/24 brd +" ) gives you 400 IP addresses. (20x20)

config_eth0=( "192.168.{1..20}.{1..20}/24 brd 192.168.{1..20}.{1..20}" )
Currently doesn't work as expected - it tries to add 160000 IP addresses with most of them duplicates thanks to a sequence in the broadcast field. Not sure how to solve this at present - but I don't see it as that much of a problem at this time.

The problem is that to get the first two examples working correctly, I need to replace spaces with _ (any char will do as long as it's not space) so that expansion works just by clever use of quoting and arrays - no loops.

Here's the current code - which accepts a string and returns an array

expand_parameters() {
    local x="$( eval echo ${@// /_} )"
    local -a a=( ${x} )
    a=( "${a[)
    a=( "${a[@](@]/#/\"}")/%/\"}" )
    echo "${a[*]//_/ }"

Any ideas about how to fix it are welcome 😃