Chinaunix首页 | 论坛 | 博客
  • 博客访问: 128640
  • 博文数量: 22
  • 博客积分: 1533
  • 博客等级: 上尉
  • 技术积分: 225
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-30 11:09
文章分类

全部博文(22)

文章存档

2011年(1)

2010年(7)

2008年(14)

我的朋友

分类:

2008-09-05 20:55:12

一、eval

eval命令会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于需要对变量进行两次扫描的情况。
eval命令在一个语句中,是按次序执行的,只不过再执行之前,先进行置换。(eval后的语句必须是一个命令,若不是则出错)

$HU="hu file"
$eval $HU
bash :hu: 找不到命令


$HU="echo file"
$eval $HU
file


二、命令替换 $()和``
  
$()和``在一个语句中,不管其在什么位置,都是先执行其内部的命令,然后在执行整条语句。但是两者在处理反斜杠时是有区别的。

$ aa=bb
$ bb=cc
$ echo -n "$(eval echo \$$aa)"
cc$ echo -n `eval echo \$$aa`
1532aa$ echo -n `eval echo \\$$aa`
cc$


究竟什么原因呢??

三、eval 和 $()

$ name=aaa
$ value=bbb
$ eval $(echo "$name=$value")
$ echo $aaa
bbb
$


分析:$()总是先执行,所以先执行echo "$name=$value" , 将变量代入后:echo "aaa=bbb" , 整条语句就变成: eval aaa=bbb ,而eval是将其后的语句当成一条指令执行: aaa=bbb , 所以最后就相当于是在赋值。


阅读(1474) | 评论(1) | 转发(0) |
0

上一篇:shell特殊字符小结

下一篇:链表排序

给主人留下些什么吧!~~

caojiangfeng2008-09-28 21:38:50

能否详尽一点,初学l呢,支支招呀