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