namerefs alternative for KSH88


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting namerefs alternative for KSH88
# 8  
Old 09-25-2012
Using the eval utility to evaluate user supplied strings allows the user to run anything the script has permission to run. There is no problem if all of the strings passed to eval were generated by the application itself and it knows what it is doing. (The eval utility constructs a command by concatenating arguments together, separating each with a <space> character and then having the shell read and execute the constructed command. So you've got tokenization, command parsing, tilde expansion, parameter expansion, command substitution, arithmetic expansion, field splitting, pathname expansion, quote removal, and I/O redirections that can all trip up an unwary script writer.)

---------- Post updated at 06:46 PM ---------- Previous update was at 06:24 PM ----------

Quote:
Originally Posted by nitrobass24
I have to use KSH88, so going to BASH, perl etc. is not an option.

Below is a much simplified verison of what I am doing (aka ignore my cut command and i not increasing) Smilie

Code:
i=1
BIGSTRING="one two three four five six seven eight"

while [[ $i -le 10 ]]; do 
typeset "STRING$i=`echo $BIGSTRING| cut -d' ' -f1-50`"
typeset -n NEWVAR="STRING$i"
do_stuff_here_w_NEWVAR
done

Namerefs are not available in KSH88
So how else i can accomplish the same thing? I need to echo a string through cut and set it to an increasing variable name based on $i then call the new variable.
I'm assuming that the code you have here isn't doing what you want. When I run the commands:
Code:
i=1
BIGSTRING="one two three four five six seven eight"

while [[ $i -le 10 ]]; do 
typeset "STRING$i=`echo $BIGSTRING| cut -d' ' -f1-50`"
typeset -n NEWVAR="STRING$i"
    echo $NEWVAR
    i=$((i+1))
done

in a recent ksh, I get the output:
Code:
one two three four five six seven eight
one two three four five six seven eight
one two three four five six seven eight
one two three four five six seven eight
one two three four five six seven eight
one two three four five six seven eight
one two three four five six seven eight
one two three four five six seven eight
one two three four five six seven eight
one two three four five six seven eight

I would have thought you would want something more like:
Code:
i=1
BIGSTRING="one two three four five six seven eight"

for NEWVAR in $BIGSTRING
do
        echo "$NEWVAR"
        i=$((i + 1))
done

which produces the following:
Code:
one
two
three
four
five
six
seven
eight

which will work in any ksh88 or later Korn shell and in any POSIX conforming shell (including ksh and bash).
# 9  
Old 09-26-2012
Quote:
Originally Posted by nitrobass24
[..]
I am running on RHEL5 (KSH93) & HPUX, SOL5.10 (KSH88)
Both HPUX and SOL5.10 probably have a ksh93 version installed: /usr/dt/bin/dtksh. If you use that instead of ksh88 then you could use nameref
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. OS X (Apple)

FFT for the AMIGA through ksh88 shell.

I don't know if anyone is interested but I have been meddling with FFT for the AMIGA. (Sadly we AMIGAns don't have these luxuries through any scripting language. Below is a Python snippet that uses the builtin 'cmath' module to work with the lowly Python 2.0.1 for the AMIGA. It is part of a... (0 Replies)
Discussion started by: wisecracker
0 Replies

2. Solaris

Solaris scripting problem with ksh88

Hello, I want to pick a random element from a list, and created these 2 lines, which work very well in ksh93. Unfortunately, I get this "bad substitution" message in ksh88. I'm wondering if there's an equivalent to the second line of my script.. or if I have to install ksh93 to make this... (8 Replies)
Discussion started by: gfroute
8 Replies

3. Shell Programming and Scripting

FTP script in ksh88

Hi I tried the following code to FTP the files from test server to dev #!/bin/ksh DST=/home/files cd $DST ftp -inv 'test_serv101' << EOF quote USER test quote PASS test # File Path on test server cd /etc/home/Or_Files ascii mget curMonth* $DST quit EOF when i try the above code it... (4 Replies)
Discussion started by: smile689
4 Replies

4. Shell Programming and Scripting

Zip size is different though files are same in ksh88

I'm using Ksh88 . I've last day files in one directory and current month files in another directory , having the same naming convention. Now i need to compare these folders size , if there is no change in these files then no action to be performed else if there is a change then i need to call... (1 Reply)
Discussion started by: smile689
1 Replies

5. Shell Programming and Scripting

Comparing Strings in ksh88

Hi I tried the following string comparison script in Ksh88 #!/bin/ksh str1='aC' str2='ABC' if then echo "Equal" else echo "Not Equal" fi Though str1 and str2 are not equal the script output says Equal . Please correct me Thanks (2 Replies)
Discussion started by: smile689
2 Replies

6. Shell Programming and Scripting

[ksh88 and awk] Number of fields with a value.

Hi, With: # VALUES="one~two~~~" # echo $VALUES | awk 'BEGIN {FS="~"} {print NF}' 5 I can determine the number of fields. How to determine the number of fields with a value ? In this case 2. Thanks in advance, ejdv (6 Replies)
Discussion started by: ejdv
6 Replies

7. Shell Programming and Scripting

Download AT&T ksh88 ?

Hello, I need ksh88 for my linux system - and I don't want pdksh. Possible to get original ksh 88 binaries or source ? (I don't need ksh93 which is available) thanks Vilius (1 Reply)
Discussion started by: vilius
1 Replies

8. Shell Programming and Scripting

Substring in ksh88 ?

Hello, ksh88 doesn't support ${var:x:y}. Any alternatives to get substring ? thanks Vilius (2 Replies)
Discussion started by: vilius
2 Replies

9. Shell Programming and Scripting

ksh88 or ksh93

Hi all! Does anybody know how can I check if any UNIX installation has implemented ksh88 or ksh93? Thanks in advance. Néstor. (3 Replies)
Discussion started by: Nestor
3 Replies

10. Shell Programming and Scripting

ksh88 - curses

I was wondering if there is anyway to use the curses library with ksh88. I saw Shell Curses function library which says I can use /usr/local/functions/shellcurses on ksh93 but I am on ksh88. I am on a HP-UX box. (0 Replies)
Discussion started by: IMTheNachoMan
0 Replies
Login or Register to Ask a Question