* character evaluating too soon - Help!


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting * character evaluating too soon - Help!
# 1  
Old 12-08-2005
* character evaluating too soon - Help!

I have a user defined configuration file, which could contain the following type of entries:

directory_001=/a/directory/structure
pattern_001=fred*
pattern_002=*

I have a script which reads the file generically which will loop round

loop 1
genvar=”directory”
iteration=”001”

eval varcontents=”\$genvar”_”$iteration”

expected results varcontents=/a/directory/structure

loop 2
genvar=”pattern”
iteration=”001”

eval varcontents=”\$genvar”_”$iteration”

expected results varcontents=”fred*”

The above appears to work fine, however, the problem arises with loop 3

loop3
genvar=”pattern”
iteration=”002”

eval varcontents=”\$genvar”_”$iteration”

expected results varcontents=”*”
actual results are an error pattern_002: parameter not set

I realise what is happening and can resolve the problem by using pattern_002=\* in the config file. The problem is that the file is user created and it may be that someone will forget the backslash before the *.

Can someone suggest a way to resolve this so that a * without a backslash can be used in the configuration file please?

Many thanks for your help,
Helen Smilie
# 2  
Old 12-08-2005
To preserve characters with a special meaning to the shell you have to protect them - usually by quoting them. Without knowing your actual code: if using \* instead of * solves your problem chances are that somewhere in your script you use your variable containing the asterisk without quoting: $variable instead of "$variable".

I suggest you look carefully through your code for such occasions, it might very well solve your problem.

Hope this helps.

bakunin
# 3  
Old 12-08-2005
You could set -o noglob before the eval and then set +o noglob after.
# 4  
Old 12-08-2005
Hi Bakunin,

The issue, I believe, is the eval statement. However I need to use the eval statement to get the contents of the variable.

Cheers
Helen
# 5  
Old 12-08-2005
Hi Grasper,

I tried that but it gets the same error. I'm not sure what noglob does.

Out of interest it HPUX 11.00 and Korn shell.

Cheers
Helen
# 6  
Old 12-08-2005
Apologies, I may have been a bit hasty in suggesting that in that way. noglob prevents wildcard characters from being expanded.

I don't know exactly how you'll be extracting your variables from the file or using them in your script, but here's a bit of code which uses eval in a similar way to the way you seem to need it and allows the asterisk character to be preserved:-

#!/bin/ksh

set -o noglob
pattern_002=*
set +o noglob
echo "PATTERN $pattern_002"

genvar="pattern"
iteration="002"

varc=$"$genvar"_"$iteration"
eval varcontents=$varc

set -o noglob
echo $varcontents
set +o noglob


When I run this I get the output:-

PATTERN *
PATTERN *

Hope that's of some use
# 7  
Old 12-08-2005
Hi Helen,

the eval-statement will surely leave the asterisk unprotected. In this case the only way to deal with it is to escape it in the script itself:

'sed s/\*/\\&/g'

Hope this helps even better. ;-))

PS: "noglobber" or the equivalent parameter "-f" prevents filename substitution. The problem is that an "eval ..." might take precedence (i have never tested that).

bakunin
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Comparing and Evaluating

Hi Guys, Good day ULF :) I hope you can help me again with my problem. I have a file which looks like this: Command was launched from partition 0. ------------------------------------------------ Executing command in server server3 Dec 18 21:31:12 AHM04 nseventmgr: EVENT-SET:... (4 Replies)
Discussion started by: rymnd_12345
4 Replies

2. Shell Programming and Scripting

Evaluating a variable

Does anyone know of a way to force a variable name held in another variable to return the value of the first variable? Best if I give an example, that does not work: /usr/local/bin >cat mike.sh NUM1ref=16 NUM2ref=32 echo "==============" for VAR in NUM1 NUM2 do XXXX=${VAR}ref echo $XXXX... (4 Replies)
Discussion started by: mikejordan
4 Replies

3. Shell Programming and Scripting

if condition not evaluating as expected

Hi all, Thanks in advance for your time. I have a data file like this: 1 7.465753425 2 8.980821918 1 1.717808219 1 6.550684932 0 5.432876712 I wish to write a bash script to check both columns and output a 1 if col1==1 AND col2<3. Otherwise I want to output a 0. In the above... (5 Replies)
Discussion started by: jem8271
5 Replies

4. Shell Programming and Scripting

$$# is evaluating to 1 when no value

I have the following in my makefile: RESULT=`../${TOOLS_ROOT_PATH}/ext_tools.sh 11`; \ set $$RESULT > tMp; \ rm tMp; \ if ; then \ echo copying external-local tool: $< \($$*\); \ mkdir -p ${EXTERNAL_LOCAL_BIN_DIR}/$<; \ cp -f... (4 Replies)
Discussion started by: jake_ryan
4 Replies

5. Shell Programming and Scripting

K Shell evaluating value to a variable

Hi, I have the following requirement. V="First" R="V" echo $$R The output should be First. How do i achieve this. how do we evaluate the $R and evaluate it to $V as $R contains V and $V is First. Thanks Vijay (2 Replies)
Discussion started by: vijaykrc
2 Replies

6. Shell Programming and Scripting

Evaluating Decimal values

How can I evaluate a decimal value in an if statement? echo "Enter limit:" read limit (enter a decmal value, ie: 2.5) decimallimit=`echo $limit+0|bc|quit` echo $decimallimit if then echo $decimallimit else echo "failed" fi (4 Replies)
Discussion started by: larrys721
4 Replies

7. UNIX for Dummies Questions & Answers

evaluating date +%m

how do i evaluate the value of date if ( $(date +%m) > 8 ) then FY_STAMP=FY$(echo $(($(date +%Y) + 1)) | cut -c3-4) else FY_STAMP=FY$(date +%y) fi i want this to make the FY_STAMP increment by 1 if the month is september and up. but cant seem to make it work (3 Replies)
Discussion started by: rsf01
3 Replies

8. UNIX for Dummies Questions & Answers

evaluating params

Hi all, I ve a script like.... TBL=employee sql=`cat abhi.sql` \\ abhi.sql contains ------- select a from $TBL echo $TBL echo $sql SQL=`echo $sql` echo $SQL now i want SQL as select a from employee and as select a from $TBL How can I achieve this? Help appriciated (3 Replies)
Discussion started by: abzi
3 Replies

9. UNIX for Dummies Questions & Answers

evaluating variables

Hi I have a script in which I have several variables var1 var2 var3 var4 etc...... and field1 field2 field3 field4 etc....... The script similar to this: (6 Replies)
Discussion started by: Bab00shka
6 Replies

10. UNIX for Dummies Questions & Answers

evaluating for a number

I apologize for the simple question but can someone please help me with how to evaluate a number? I will be reading in a file and if a number is >= 100000000, I will do something, if not, I will exit the if statement. Thanks in advance (1 Reply)
Discussion started by: hedrict
1 Replies
Login or Register to Ask a Question