简单来说eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。
废话不多说,我们先来看一个例子
1.test.txt内容:hello world!
#定义一个变量myfile
myfile=“cat test.txt”
echo $myfile #结果为 cat test.txt
eval echo $myfile #结果为; hello world!
第二个案例
2.vi eval.sh
[yanwxu@phxdpeetl004 ~]$ vi eval.sh
#! /bin/bash
echo "Last argument is $(eval echo \$$#)"
echo "Last argument is $(eval echo $#)"
[yanwxu@phxdpeetl004 ~]$chmod u+x eval.sh
接着运行此脚本
[yanwxu@phxdpeetl004 ~]$ ./eval.sh t1 t2 t3 t4
Last argument is t4
Last argument is 4
[yanwxu@phxdpeetl004 ~]$
eval在需要的时候会对命令进行两次扫描