Path: utzoo!utgpu!news-server.csri.toronto.edu!rutgers!uwm.edu!cs.utexas.edu!helios!skdutta From: skdutta@cs.tamu.edu (Saumen K Dutta) Newsgroups: comp.unix.internals Subject: Re: puzzle Message-ID: <10411@helios.TAMU.EDU> Date: 27 Nov 90 07:08:27 GMT References: <1990Nov27.003659.3521@informix.com> Sender: usenet@helios.TAMU.EDU Distribution: usa Organization: Computer Science Department, Texas A&M University Lines: 100 In article <1990Nov27.003659.3521@informix.com> housed@infmx.informix.com (Darryl House) writes: -> ->The following is a Bourne shell script that illustrates ->what I am trying to do: set a shell variable that ->contains the contents of another one that is referred ->to by concatenating two others. Sufficiently confusing? ->Yeah, I thought so, too. -> ->Note that I don't really want to keep track of how many ->iterations there are, that'd be absurdly simple to track. ->The application is too complex to describe here, but I ->did fix the problem by using a C program rather than ->a shell script. I just thought that this was a very ->interesting puzzle. -> ->-------------------------------------------------------- ->#! /bin/sh -> -># what I want is to be able to set -># the ITERATION variable to be the expanded -># version of $PREFIX$SUFFIX, i.e. the first iteration -># would be the contents of $firsttime, the second -># would be the contents of $secondtime. The following -># code gives me errors, and everything I try either gets -># the same substitution failure or just echoes the name -># of the variable, i.e. ($firsttime and $secondtime). -> ->echo -> ->firsttime="first_time" ->secondtime="second_time" -> ->PREFIX_WORDS="first second" ->SUFFIX="time" -> ->for PREFIX in $PREFIX_WORDS ->do -> -># the following line doesn't work, but -># sort of illustrates what I want to do. -># I want this to be ITERATION=$firsttime the first time -># through and ITERATION=$secondtime the second time. -> -> ITERATION=${$PREFIX$SUFFIX} -> -> echo 'Iteration is $ITERATION' ->done -> ->echo -> ->exit 0 ->-------------------------------------------------------- -> ->Required output: -> ->prompt% program_name -> ->Iteration is first_time ->Iteration is second_time -> ->prompt% -> ->Any hints you can offer will be greatly appreciated. -> ->Thank you, and have a nice day! When you try to read a value as a variable it is a nice idea to consider the ( otherwise neglected ! ) eval. Try this as a substitute : #! /bin/sh firsttime="first_time" secondtime="second_time" PREFIX_WORDS="first second" SUFFIX="time" for PREFIX in $PREFIX_WORDS do # IT WORKS !!!!! ITERATION=`eval echo $"$PREFIX$SUFFIX"` echo Iteration is $ITERATION done echo ------------------ Hope this helps -- _ ||Internet: skdutta@cssun.tamu.edu ( /_ _ / --/-/- _ ||Bitnet : skd8107@tamvenus.bitnet __)_/(_____(_/_(_/_(_(__(_/_______ ||Uucp : uunet!cssun.tamu.edu!skdutta .. ||Yellnet: (409) 846-8803