[Discuss] Bourne Shell variable assignment question
Chris Tyler
chris at tylers.info
Thu Dec 15 16:51:36 EST 2011
On Thu, 2011-12-15 at 16:35 -0500, Jerry Feldman wrote:
> On 12/15/2011 04:27 PM, Richard Pieri wrote:
> > On 12/15/2011 4:25 PM, Peter Doherty wrote:
> >> Of course, one has to ask why your co-worker is doing this, and not
> >> just sourcing the file.
> >> Also, my example will break if you have an equal sign in your
> >> variable name or value name.
> >
> > This. Sourcing the file is going to be the fastest and most reliable
> > way to do it.
> >
> This is 100% agreed. The issue is that he does not want to source the
> file and I have not been able to talk him out of it. In the past I have
> written scripts where you could read the name of a variable, and then
> convert it to a variable name, but I don't think I've done it in Bourne
> of BASH.
There are lots of options:
#!/bin/sh
# equivalent to sourcing the file
while read LINE
do
eval "$LINE"
done <datafile
#!/bin/bash
# same as above, bash/ksh only
for LINE in $(<datafile)
do
eval "$LINE"
done
#!/bin/sh
# similar, but rejects lines that are not NAME=VALUE or have spaces
# also exports all variables processed
egrep "^[^= ]+=[^= ]+$" datafile|while read LINE
do
eval "export $LINE"
done
You could easily parse out the name and value separately, but there's no
reason to, because you're going to end up putting them on either side of
an equal sign in an eval anyways.
-Chris
More information about the Discuss
mailing list