[Discuss] Bourne Shell variable assignment question

Dan Kressin dkressin at yahoo.com
Thu Dec 15 17:45:10 EST 2011


>On 12/15/2011 04:31 PM, Jerry Feldman wrote:
>Just want to simplify.
>#!/bin/bash
>varname=myvar
>varvalue=foo
>--- do something to create myvar.
>myvar=$varvalue
>echo $myvar


I think 'declare' might be what you were looking for, although AFIACT it's not part of Bourne.  But this works with BASH when invoked as 'sh'.  (Note needing to reset IFS midstream so that declare doesn't throw away the = it needs..)


[root at kressin01v ~]# cat myvars
var1=foo
var2=bar
var3=baz
[root at kressin01v ~]# cat readvar.sh
#!/bin/sh
#
OLDIFS="$IFS"
IFS="="
echo "BEFORE"
echo "====="
set | grep "^var"
echo "====="
while read myvar myvalue
do
        echo "$myvar: $myvalue"
        IFS="$OLDIFS"
        declare $myvar="$myvalue"
        IFS="="
done

echo "AFTER"
echo "====="
set | grep "^var"
echo "====="

echo "var1: $var1"
echo "var2: $var2"
echo "var3: $var3"
[root at kressin01v ~]# cat myvars | ./readvar.sh
BEFORE
=====
=====
var1: foo
var2: bar
var3: baz
AFTER
=====
var1=foo
var2=bar
var3=baz
=====
var1: foo
var2: bar
var3: baz
[root at kressin01v ~]#

I could see this (rather than sourcing directly) being potentially useful if you didn't know what variables would be in the file and wanted to keep a list or something without rereading the file.  Though there are surely better / less kludgy ways of accomplishing that particular goal as well.

-Dan



More information about the Discuss mailing list