exec eval source

来源:互联网 发布:淘宝店最高等级是什么 编辑:程序博客网 时间:2024/04/30 15:04

转自:http://zhgw01.blog.163.com/blog/static/10414812200912025735381/


eval

eval "translates" a value buried inside a variable, and then runs the command that was buried in there
eval arg1 [arg2 arg3]就是将参数组合起来,并替换其中的变量,这样得到的结果作为一条命令进行运行

Code:
for i in 1 2 3do   eval myvar="$i"   echo "$myvar"done# this gives 123# why? because there is no metavalue or special meaning to 1 or 2 or 3
Code:
for i in ls dfdo    eval myvar="$i"    echo "$myvar"done# here you get output from the ls command and the df command如果不使用eval的话,结果就是ls跟df了
   
 另外一个用eval要注意的是:

比如 nn=aa; aa=final; eval dn=\$$nn; echo $dn 会给出final
但是 eval dn=$"$nn";echo $dn给出 aa
eval dn="$"$nn; echo$dn给出final
原因据说是eval对\后面或者“”里面的字符串不进行扩展,而仅仅只是在其它需要扩展的扩展完成后将“”或者\去掉,最后再作为命令执行
所以eval dn="$"$nn先扩展出dn="$"aa,再去点""得到dn=$aa,然后将这个作为命令执行
eval dn=$"$nn"由于“”不进行扩展,而$"xxx"得到的结果是xxx,所以得到dn=$nn作为命令执行


exec

exec starts another process - BUT - it exits the current process when you do this kind of thing
使用exec,shell就不会调用fork,直接以后面的命令的内容代替当前shell的代码

Code:
#!/bin/bashexec echo "leaving this script forever  $0"   # Exit from script here.# ----------------------------------# The following line never happensecho "This echo will never echo."

source

When you run a command in the shell - like another script or a command like ls -
the shell creates a subprocess (called child process). Any environmentvariable that got defined or changed down in the child is LOST FOREVERto the parent process.

However if you source a script (there are two ways) you force thescript to run in the current process. That means environment variablesin the script you ran are NOT LOST.

Code:
# script1MYVAR="HI there!"# end script1
Code:
# script2# first, run script 1script1# now is the MYVAR variable set?  No -why? it got set in the child, when the child exited it GOT LOSTecho "MYVAR= $MYVAR"# now source script1 :: putting a lonesome dot or the command  "source" #  in front of the script name have the same effect. script1#  . script1 == source script1  these two are the SAME THINGsource script1# now is the MYVAR variable set?  This time we see that MYVAR has a valueecho "MYVAR= $MYVAR"

0 0
原创粉丝点击