Shell eval命令

Shell中的eval命令用于重新运算求出参数的内容,可读取一连串的参数,然后再依参数本身的特性来执行。

eval使用

eval命令会先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。

回显变量

eval命令可以用于回显简单变量,不一定是复杂变量。

1
2
3
4
5
$ NAME=Pooky
$ eval echo $NAME
Pooky
$ echo $NAME
Pooky

执行含有字符串的命令

test.txt文件:

1
Hello World!!!

1
2
3
4
5
6
7
8
$ testfile="cat test"
$ echo $testfile
#输出
cat test
$ #eval $testfile
#输出
Hello World!!!

eval命令第一次扫描进行了变量置换,第二次扫描执行了该字符串中所包含的命令cat test

获得最后一个参数

1
2
3
4
5
6
$ cat test
#!/bin/bash
echo "Last argument is $(eval echo \$$#)"
$ ./test test last
Last argument os last

eval命令首先把$$#解析为当前Shell的参数个数,然后在第二次扫描时
得出最后一个参数。