曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3518|回复: 0
打印 上一主题 下一主题

eval -- 对命令行扫描,替换并执行

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2010-10-18 08:45:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
eval 可以对命令行进行扫描,然后进行相应的替换,最后执行命令行。这种用法相当于 C 语言中的对宏定义的展开。

如下使用:
$direct=">"
$eval echo "hello world" $direct hello.txt
$cat hello.txt
hello world
上面,direct 变量的值被赋予 ">" 符号。在第 2 行使用 eval 扫描了 “echo "hello world" $direct hello.txt“ 这条命令行。在第 1 次扫描时,发现变量 $direct ,然后将其展开为:echo "hello world" > hello.txt 。最后执行这条命令。

又如:
$ pipe="|"
$ eval ll $pipe wc -l
77
由上可见,eval 的作用是进行 2 次命令行扫描,最后执行。第一次扫描是为了展开相关变量,第二次扫描是为了执行命令行。

2. 可以用 eval 取得命令行中的最后一个参数,如有一个脚本文件 last.sh,里面只有一条命令:
eval echo \$$#
现在以带有参数的命令行来运行这个脚本:
$ sh last.sh arg-1 arg-2 arg-3
arg-3
它输出了最后一个参数 arg-3 。$# 代表命令行中最后一个参数,它也相当于 1 个变量,所以在上面需要 \$,反斜杠符号 \ 表示取消 $ 的特殊意义,使之被看作普通的 $ 符号。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 15:34 , Processed in 0.078598 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表