曲径通幽论坛

标题: eval -- 对命令行扫描,替换并执行 [打印本页]

作者: beyes    时间: 2010-10-18 08:45
标题: eval -- 对命令行扫描,替换并执行
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 个变量,所以在上面需要 \$,反斜杠符号 \ 表示取消 $ 的特殊意义,使之被看作普通的 $ 符号。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2