On Tue, Oct 02, 2007 at 12:48:04PM -0700, Mike Bird wrote:
> On Tuesday 02 October 2007 11:49, Andrew Sackville-West wrote:
> > Hey folks, help me out with this...please
> >
> > [EMAIL PROTECTED]:~$ for i in {1..3}; do echo $i; done
> > 1
> > 2
> > 3
> > [EMAIL PROTECTED]:~$ TEST=3; for i in {1..$TEST}; do echo $i; done
> > {1..3}
> >
> >
> > in the first example, its obvious. In the second, $TEST gets replaced
> > with 3, but then the {} doesn't get expanded. I'm sure I have to do
> > some kind of wacky $({[ type thing, but I'm not able to grok it. any
> > ideas?
> >
> > the purpose is to be able to easily update some loops in a script for
> > different numbers of object to iterate over. obvious, I guess.
> 
> From man bash:
> 
>        Brace expansion is performed before any other expansions, and any 
> char???
>        acters  special to other expansions are preserved in the result.  It is
>        strictly textual.  Bash does not apply any syntactic interpretation  to
>        the context of the expansion or the text between the braces.
> 
> This is not pretty but it works:
> 
>        TEST=3; for i in $(eval echo {1..$TEST}); do echo $i; done

Andrew,

This I why I use phthon for such scripts.  Its much prettier.

[UNTESTED, but enough to point you in the right direction]
I added a sample sanity check.


#! /usr/bin/python

import os

try:
        TEST_env = os.environ['TEST']
except KeyError:
        print "TEST environment variable not set"
        os.exit()

try:
        TEST = int(TEST_env)
except ValueError:
        print "TEST environment variable not an integer"
        os.exit()

# do whatever other sanity checks you want.

### without sanity checkes, this would be:
# TEST = int(os.environ['TEST'])

for i in range(1, (TEST + 1)):
        print i

#######

### Without sanity checks and a one-liner:

for i in range(1, (int(os.environ['TEST']) +1)): print i

####

Doug.


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED] 
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to