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:
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?
Regards,
Ratna
No it isn't difficult. With:
the eval processes the command line yielding:
and then passes those commands to the shell yielding:
but with:
the eval processes the command line yielding:
and then passes this single echo command to the shell yielding:
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:
into your shell.
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:
and type some eval commands into your shell. (When you're done with this experiment, enter the command:
to turn off input echoing and tracing.)
thanks for the hint. I tried to "log" the steps. For the line:
, I got this steps:
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:
Why do you need to echo an echo command?
What pipe are you talking about?
What file redirection are you talking about?
What are you hoping to achieve by evaluating the contents of a file that can't be accomplished by sourcing the file?
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)
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)
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)
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)
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)
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)
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)