robi@bacchus.esa.oz.au (RoBeRt KaRp) (03/06/91)
All below is in Bourne shell.
I am trying to acheive the following:
users="robi henry matt"
for person in $users
do
${person}_files="something that gives me a list of files say x.c y.c z.c"
done
What I want to do now is get to the list of files. Something like:
for file in ${${person}_files}
do
something_to_do_with_file
done
However, I can't access this, ${${person}_files}, variable. The
shell tells me bad substitution for the above and I can't think
of a way to get ${robi_files} (say) out of this.
Any help would be appreciated,
Thanx,
- Robi
--
INTERNET: robi@bacchus.esa.oz.au ACSnet: robi@bacchus.esa.oz
Tel : (+61) (3) 819 4554 Robert Karp///
Fax : (+61) (3) 819 5580 ////
UUCP : uunet!bacchus.esa.oz.au!robi \XXX/jrw@mtune.att.com (Jim Webb) (03/09/91)
In article <robi.668225101@thomas> robi@bacchus.esa.oz.au (RoBeRt KaRp) writes: >All below is in Bourne shell. >I am trying to acheive the following: > >users="robi henry matt" >for person in $users >do > ${person}_files="something that gives me a list of files say x.c y.c z.c" >done > >What I want to do now is get to the list of files. Something like: > >for file in ${${person}_files} >do > something_to_do_with_file >done > >However, I can't access this, ${${person}_files}, variable. The >shell tells me bad substitution for the above and I can't think >of a way to get ${robi_files} (say) out of this. What you need to do is fiddle with the sh builtin "eval" to do this. One quickly hacked way is the following: users="robi henry matt" for person in $users do # you need both sets of quotes (' & ") otherwise eval will # think you are setting person_files to one thing, and then # a command composed of the rest of the files, eg it will # think you mean robi_files=x.c y.c z.c instead of # robifiles="x.c y.c z.c" eval ${person}_files='"${person}x.c ${person}y.c ${person}z.c"' done for person in $users do echo "${person}_files: \c" for i in `eval echo \\$\${person}_files` do echo "$i \c" done echo done Now, I am sure I've added one too many steps in this mess (at least) but it's getting into the weekend, so, you can fiddle with it :-) Later, -- comp.windows.open-look -&- alt.sex.pictures.d Jim Webb alt.sex.bondage -&- comp.graphics.visualization jrw@mtune.att.com Sex and voyeurism and fantasy... Those who can't do, watch and imagine. --ccs
jik@athena.mit.edu (Jonathan I. Kamens) (03/11/91)
Use "eval" to get what you want. For example:
$ jik_files="a.c b.c c.c"
$ echo $USER
jik
$ for file in `eval echo '$'${USER}_files`; do echo $file; done
a.c
b.c
c.c
$
--
Jonathan Kamens USnail:
MIT Project Athena 11 Ashford Terrace
jik@Athena.MIT.EDU Allston, MA 02134
Office: 617-253-8085 Home: 617-782-0710