UNIX-WIZARDS Digest V11#044

Arthur W. Protin Jr. protin at pica.army.mil
Wed Nov 28 04:44:02 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.
.
.
.
->--------------------------------------------------------
->#! /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

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
    #
    # this does what you wanted
    #
    eval "ITERATION=\$$PREFIX$SUFFIX"
    echo Iteration is $ITERATION
    #
    # this show how to assign values to variable whose name you compute.
    #
    eval "$PREFIX$SUFFIX=${PREFIX}.time"
    eval "ITERATION=\$$PREFIX$SUFFIX"
    echo Iteration is $ITERATION
done

echo

 ------------------

While this resembles the solution offered by Saumen K Dutta, it does
not require the spawning of a subshell and as such should be faster.
It also includes the demonstration of assignment to calculated variable
names.


Arthur Protin <protin at pica.army.mil>
These are my personal views and do not reflect those of my boss
or this installation.



More information about the Comp.unix.internals mailing list