Eval


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Eval
# 15  
Old 04-25-2013
thank you

Last edited by ratnalein88; 05-06-2013 at 03:45 AM..
# 16  
Old 04-25-2013
Quote:
Originally Posted by ratnalein88
Hallo Don Cragun,

Exactly, it is exactly the problem I am facing:


I just dont understand why the escape of double-quotes would cause this, because in my logic:

Lets say, in the file.dat is only this:

my name is ratna

Then, it will be:
Code:
eval echo ""my name is ratna""

this is so wierd right? I dont want to just know that the one version causes a, the other one causes b. I really want to know how eval works.. Is it really that difficult?Smilie

Regards,

Ratna
No it isn't difficult. With:
Code:
eval echo "`cat $var`"

the eval processes the command line yielding:
Code:
echo echo "this is step 1"
date

and then passes those commands to the shell yielding:
Code:
echo this is step 1
<<<output from date command>>>

but with:
Code:
eval echo "\"`cat $var`\""

the eval processes the command line yielding:
Code:
echo "echo "this is step 1"
date"

and then passes this single echo command to the shell yielding:
Code:
echo this is step 1
date

The escaped quotes from this eval and the quotes inside file were paired together by the shell just as it would if you typed the command:
Code:
echo "echo "this is step 1"
date"

into your shell.
# 17  
Old 04-26-2013
thank you

Last edited by ratnalein88; 05-06-2013 at 03:46 AM..
# 18  
Old 04-26-2013
All of the descriptions I've seen of eval are vague (including in the formal standards) and just say something like:
Quote:
The eval utility shall construct a command by concatenating arguments together, separating each with a <space> character. The constructed command shall be read and executed by the shell.
From years of experience, I believe that what eval does when concatenating arguments is to perform alias substitution, tilde expansion, parameter expansion, command substitution, arithmetic expansion, field splitting, pathname expansion, quote removal, and (maybe) I/O redirections. (I've never had a case when using eval where it mattered whether redirections happened on the first command line evaluation or were only evaluated when eval passed the resulting command to the shell for its second evaluation, so I've never needed to try to construct a case to determine when redirections are performed.)

The easy way to see what eval does is to issue the command:
Code:
set -xv

and type some eval commands into your shell. (When you're done with this experiment, enter the command:
Code:
set +xv

to turn off input echoing and tracing.)
# 19  
Old 04-26-2013
thank you

Last edited by ratnalein88; 05-06-2013 at 03:46 AM..
# 20  
Old 04-26-2013
If you read my post, you will find a syntax for eval that works in it...
# 21  
Old 04-26-2013
Quote:
Originally Posted by ratnalein88
Hallo Don Cragun,

thanks for the hint. I tried to "log" the steps. For the line:
Code:
eval echo "`cat $var`"

, I got this steps:

Code:
1. eval echo "`cat $var`"
2. cat $var
3. ++ cat datei.dat
4. + eval echo 'echo "this is step 1"
   date'
5. echo echo "this is step 1"
6. ++ echo echo 'this is step 1'
7. echo this is step 1
   date
8. ++ date
9. Friday, April 26, 2013  1:14:54 PM CEST

I dont understand, what shell does from step 4 to step 5..
It seems like, the single quotes will just disappered.

Do you have any clue?

Thank you.

Regards,

Ratna
After the command substitution performed by the eval of the contents of the file, the quotes that resulted from the command substitution remain. When eval gives that quoted string to the shell to reevaluate and execute, the quotes will be removed during the 2nd evaluation preceding the execution of the reevaluated commands.

I have repeatedly answered your questions. You have repeatedly avoided answering our questions:
  1. Why do you need to echo an echo command?
  2. What pipe are you talking about?
  3. What file redirection are you talking about?
  4. What are you hoping to achieve by evaluating the contents of a file that can't be accomplished by sourcing the file?
  5. What are you trying to do?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Error in eval eval command to print html tags

anyone has any info on why this is complaining??? vivek@vivek-c5e55ef2e ~/TAC $ zoneCounter=1 vivek@vivek-c5e55ef2e ~/TAC $ optUsage1=23% vivek@vivek-c5e55ef2e ~/TAC $ eval eval echo "<th>Zone $zoneCounter </th><th align=\"left\"> \$optUsage$zoneCounter </th>" -bash: syntax error... (13 Replies)
Discussion started by: vivek d r
13 Replies

2. Shell Programming and Scripting

Error in eval eval command to print html tags

anyone has any info on why this is complaining??? vivek@vivek-c5e55ef2e ~/TAC $ zoneCounter=1 vivek@vivek-c5e55ef2e ~/TAC $ optUsage1=23% vivek@vivek-c5e55ef2e ~/TAC $ eval eval echo "<th>Zone $zoneCounter </th><th align=\"left\"> \$optUsage$zoneCounter </th>" -bash: syntax error... (1 Reply)
Discussion started by: vivek d r
1 Replies

3. Shell Programming and Scripting

Help on eval please

Hello All, Since my variables are nested I use eval to populate the data. I have an ambiguity here when eval is used along with & say I have the below variable url="www.unix.com" , this come from function call as argument. I want to take this into another variable say... (6 Replies)
Discussion started by: sathyaonnuix
6 Replies

4. Shell Programming and Scripting

Strange result of eval, how does eval really work with ssh?

Hi all, some small script with eval turned me to crazy. my OS is linux Linux s10-1310 2.6.16.53-0.8.PTF.434477.3.TDC.0-smp #1 SMP Fri Aug 31 06:07:27 PDT 2007 x86_64 x86_64 x86_64 GNU/Linux below script works well #!/bin/bash eval ssh remotehost date eval ssh remotehost ls below... (1 Reply)
Discussion started by: summer_cherry
1 Replies

5. Shell Programming and Scripting

eval

hi all, Am trying to add some code to a ksh script and i dont understand how an eval function is used : _var=$1 _conceal=$2 eval _val=\$${_var} can someone shed some light on what the eval function in the above context means/does ?? thanks. (4 Replies)
Discussion started by: cesarNZ
4 Replies

6. Shell Programming and Scripting

eval help

I am trying to expand the variable $user in my alias command and tried several variations of eval but can't seem to get it to work. The end result should be either: oracle_user='sudo su - oracle ' or oracle_user='sudo su - oracle1 ' user=$(grep '^oracle:' /etc/passwd | cut... (5 Replies)
Discussion started by: BeefStu
5 Replies

7. UNIX for Advanced & Expert Users

eval behaviour

Hi, I have snippet like the following x="1" prompt1="hi" if I say eval echo \$prompt$x then it is giving o/p "hi" if I say `eval echo \$prompt$x` here it is giving 1 ! if I add one more escape character i.e. `eval echo \\$prompt$x` then it is giving "hi" Can you please... (3 Replies)
Discussion started by: shahnazurs
3 Replies

8. Shell Programming and Scripting

eval misconception

Hi, I have two files "foo" and "bar" $ cat foo a is \$a and b is \$b $ cat bar car tree using the below 'while' loop I expect the output to be: a is car and b is tree while read a b; do eval echo $(cat foo) # o/p: a is $a and b is $b eval "echo $(eval "cat foo")"... (1 Reply)
Discussion started by: royalibrahim
1 Replies

9. Shell Programming and Scripting

EVal

Hi All, I'm running some encrypted data through a script I wrote. In order to do this, I'm using eval to resolve some of my variables. At the moment, when I use eval to resolve, it strips out some of my encrypted values, and totally drops some others. For example if I have the value ab1"3 it drops... (1 Reply)
Discussion started by: Khoomfire
1 Replies

10. Shell Programming and Scripting

eval a variable that has a .

Hi, Is there any way that I can eval the following - eval abc.csv=def.csv I am getting the - bash: command not found error. thanks. (3 Replies)
Discussion started by: ttshell
3 Replies
Login or Register to Ask a Question