puzzle

Saumen K Dutta skdutta at cs.tamu.edu
Tue Nov 27 18:08:27 AEST 1990


In article <1990Nov27.003659.3521 at informix.com> housed at 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 at cssun.tamu.edu  
    (   /_     _ /   --/-/- _            ||Bitnet : skd8107 at tamvenus.bitnet 
   __)_/(_____(_/_(_/_(_(__(_/_______    ||Uucp : uunet!cssun.tamu.edu!skdutta
                                 ..      ||Yellnet: (409) 846-8803



More information about the Comp.unix.internals mailing list