UNDER KSH, HOW TO MAKE VARIABLE STRING VARIABLE NAME REFERENCES
ITEM: RTA000052265
QUESTION:
I am using ksh and would like to use string variables that can
be modified.
Basically, what I am trying to do is this:
A1="string 1"
A2="string 2"
C is a "common" string variable
I would like to use C as a common string variable that could be
set within a loop to pick up the various Ax values. As an example,
D = 1
while (D < 5)
do
C=$A$D
etc
Ignore syntax here. Anyway, when I try to do this I get back a
ksh message saying "1 not defined" for the first value and so on.
Is there a way to do this? I have a 1400 line script that could
be squashed down to one sixth it's size if I could make the variable
references variable.
---------- ---------- ---------- --------- ---------- ----------
A: The best way to accomplish what you desire is to use Korn Shell's
array feature. I have included some sample source code below that
demonstrates the use of ksh arrays:
#¢/bin/ksh
string="This is a big really really long string"
set -A array2 This is another way to set an array
array1.1.=This
array1.2.=is
array1.3.=an
array1.4.=example
array1.5.=of
array1.6.=arrays
array1.7.=in
array1.8.=action
let x=0
for word in $string
do
let x=x+1
array3.x.=$word
done
print "\n\n\nStrings...\n"
print "Array array1:" ${array1.*.}
print "Array array2:" ${array2.*.}
print "Array array3:" ${array3.*.}
print "\nArray2 has" ${#array2.*.} "elements.\n"
while .. $x > 0 ..
do
printf ' d: 9s 9s 9s\n' $x ${array1.x.} ${array2.x-1.} ${array3.x.}
let x=x-1
done
Unfortunately, there will be much of this script which will not
translate including the following:
Left Curly Bracket '{' Right Curly Bracket '}'
Left Square Bracket '.' Right Square Bracket '.'
Backslash '\' Percent ' '
If the result is too unreadable, I will be happy to fax this code to
you. Please reference 'Learning the Korn Shell' by Bill Rosenblatt
or 'The Kornshell Command and Programming Language' by Morris I. Bolsky
and David G. Korn for additional information
---------- ---------- ---------- --------- ---------- ----------
QUESTION:
I got a great tip from my customer on a command called eval.
An example of it's use is:
A1="This is A1"
A2="This is A2"
for X in 1 2
do
eval C='$A'$X # $X will be evaluated but $A won't be until
echo $C # C is "accessed" because it is quoted
done
This method avoids the use of arrays which ksh has a minimum
allocation of 1024 (according to one book I read), and I find
it pretty easy to use.
---------- ---------- ---------- --------- ---------- ----------
This item was created from library item Q675899 FFFKG
Additional search words:
FFFKG IX JAN95 KSH LPPS NAME NAMING OZNEW REFERENCE REFERENCES RISCO
RISCSYSTEM SOFTWARE STRING SUPT VARIABLE
WWQA: ITEM: RTA000052265 ITEM: RTA000052265
Dated: 01/1995 Category: RISCO
This HTML file was generated 99/06/24~12:43:20
Comments or suggestions?
Contact us