eval命令典型

例子2:一个典型错误的例子

错误!这里给个典型的例子大家看看。

[root@localhost ~]# eval b="aa ls -al | grep cen"
-rw-r--r-- 1 root root 360742400 Aug 9 19:18 centos7java.tar



[root@home root]# a="id | cut -f1 -d' '"
[root@home root]# $a
id:无效选项 #  f
请尝试执行‘id # help’来获取更多信息。
[root@home root]# eval $a
uid=0(root)

如果命令行复杂的话(包括管道或者其他字符),直接执行$a字符串的内容就会出错。分析如下。
$a的处理位于第6步──参数扩展,也就是说,跳过了管道分析,于是"|", "cut", "-f1", "-d"都变成了id命令的参数,当然就出错啦。
但使用了eval,它把第一遍命令行处理所得的"id", "|", "cut", "-f1", "-d"这些字符串再次进行命令行处理,这次就能正确分析其中的管道了。

总而言之:要保证你的命令或脚本设计能正确通过命令行处理,跳过任意一步,都可能造成意料外的错误

posted @ 2020-08-10 16:49  技术颜良  阅读(236)  评论(0编辑  收藏  举报