Resolving a parameter which is passed as parameter

Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Resolving a parameter which is passed as parameter
# 1  
Old 10-05-2013
Hammer & Screwdriver Resolving a parameter which is passed as parameter

I have the following files.
export TMP_DIR=/home/user/folder1
export TMP_DIR_2=/home/user/folder2
while read line
cat "$line"

-> cat file_list.dat

-> cat /home/user/folder1/file1.txt
This is data from file1

-> cat /home/user/folder2/file2.txt
This is data from file2

In the above code when I execute the file, variable $TMP_DIR and $TMP_DIR_2 are not getting resolved. instead the error it shows file not available:$TMP_DIR/file1.txt .
My objective is to get the content of file1 and file2 inside for further processing.
Could someone please help me on this.

Thanks in advance

Last edited by radoulov; 10-05-2013 at 09:37 AM..
# 2  
Old 10-05-2013
You can force the shell to re-evaluate a string using eval, e.g.:
cat $(eval echo $line)

This User Gave Thanks to CarloM For This Post:
# 3  
Old 10-05-2013
Thanks a lot.
This worked.
# 4  
Old 10-05-2013
Please be aware that eval is deprecated and dangerous.

Nevertheless, you can simplify above to
eval cat "$line"

# 5  
Old 10-07-2013

When I use
eval cat "$line"
cat $(eval echo $line)

and my filename contains spaces - I get the following error - " No such file or directory"

For Ex:

-> cat filelist.dat
$TMP_DIR/file f1.txt

It throws the following:
cat: /home/user/folder1/file: No such file or directory
cat: f1.dat: No such file or directory

Where as when I use cat "file f1.txt" it works, though without $TMP_DIR. But my objective is to attain $TMP_DIR resolution and file expansion.

Can you plz help on this?

Thanks in advance

Last edited by radoulov; 10-07-2013 at 12:28 PM..
# 6  
Old 10-07-2013
As you've noted, you need to quote the string to supply a pathname containing spaces. The same still applies when you're using a variable.

cat "$(eval echo \"$line\")"

Technically, the extra quotes around $line aren't necessary for your example case but if you want to preserve other whitespace then you will need them (without them echo will receive 2 arguments, which it will print with a space separator),
This User Gave Thanks to CarloM For This Post:
# 7  
Old 10-07-2013
eval cat \"$line\"

This User Gave Thanks to RudiC For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Passing parameter to script, and split the parameter

i am passing input parameter 'one_two' to the script , the script output should display the result as below one_1two one_2two one_3two if then echo " Usage : <$0> <DATABASE> " exit 0 else for DB in 1 2 3 do DBname=`$DATABASE | awk -F "_" '{print $1_${DB}_$2}` done fi (5 Replies)
Discussion started by: only4satish
5 Replies

2. Shell Programming and Scripting

Command that takes one parameter and then searches for the passed in parameter

Hi I am looking for a unix command or a small shell script which can takes one parameter and then searches for the passed in the parameter in any or all files under say /home/dev/ Can anyone please help me on this? (3 Replies)
Discussion started by: pankaj80
3 Replies

3. Shell Programming and Scripting

Incrementing the date depending on the Counter (parameter) passed to the script

Hello Everyone, I have been trying to complete a shell script where, I need to increment the date depending on the file (depending on the date) availability on the remote server. i.e. Basically, I will be passing a counter (like parameter 1 or 2 or 3 or 4). First I will check for the... (1 Reply)
Discussion started by: filter
1 Replies

4. UNIX for Dummies Questions & Answers

checking if parameter passed is a number

I have written a function that fills an array and another function where if a parameter is supplied it will jump to that part of the array and cat it to the screen. I need to put in some checks to make sure the parameter supplied is firstly a number and then not a number great than the length of... (2 Replies)
Discussion started by: magnia
2 Replies

5. Shell Programming and Scripting

How can i passed a parameter to a file?

i got a file called Pass1, and then i need to passed a number to my script with the '-p pass_mark' option. Example type Pass1 -p 18 to pass 18 to my script for comparing things, so how can i do it? (7 Replies)
Discussion started by: mingming88
7 Replies

6. Shell Programming and Scripting

Detecting Doublequotes(") When passed as parameter to shell script

Hi, I am executing a shell script which takes a string as a parameter. The scipt should validate the string and create the directoy with the name of specfied string. The following is the specified command and its parameter. "abc abc" The shell script is not able to identify... (4 Replies)
Discussion started by: raghu.amilineni
4 Replies

7. Shell Programming and Scripting

how to find the path of a file when it is passed as ....filename(parameter) to script

hi unix guru's..................:confused: question is posted in the #3 permalink shown below. (3 Replies)
Discussion started by: yahoo!
3 Replies

8. UNIX for Dummies Questions & Answers

checking parameter values passed to script

Hi, I will pass 3 parameters for a script.I have to check the file name and create a new file name with time stamp. the parameters which i'm passing are /dir/stg/filename.txt /dir/path/head.txt /dir/path/tail.txt Now i have to check filename like : if it is a.txt i have to create... (2 Replies)
Discussion started by: ammu
2 Replies

9. Shell Programming and Scripting

manipulate a passed in parameter

I am passing a file name as a parameter to shell script the parameter is getfile.txt.gpg how do i process this parameter to get name like getfile.txt only and eleminate the .gpg text?? Thanks in advance (2 Replies)
Discussion started by: rudoraj
2 Replies

10. Shell Programming and Scripting

how do I make dynamic parameter names? Or get the value of a parameter evaluated twi

Say I write something like the following: var1=1 var2=2 for int in 1 2 do echo "\$var$int" done I want the output to be: 1 2 Instead I get something like: $var1 $var2 (2 Replies)
Discussion started by: Awanka
2 Replies
Login or Register to Ask a Question