大家好,感谢邀请,今天来为大家分享一下在一篇文章中了解shell 脚本中的eval 命令,并附有实验说明的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
语法:eval [参数]
补充说明:eval可以读取一系列参数,然后根据参数本身的特点来执行。
参数:参数个数没有限制,参数之间用分号分隔。
eval 命令将首先扫描命令行中的所有替换,然后执行该命令。该命令用于一次扫描无法实现其功能的变量。该命令扫描变量两次。这些需要两次扫描的变量有时称为复杂变量。 eval 还可以用于回显简单变量,不一定是复杂变量。
eval的作用是再次执行命令行处理,即对一个命令行执行两次命令行处理。想要用好这个命令,需要付出一定的努力。这里举几个例子来帮助你理解。
二、实验
1. 评估命令
eval echo 相当于echo
2. 扫描两次
该命令适用于顺序扫描不能完成其功能的变量。
步骤1:扫描eval后面的命令,进行变量替换,保留普通命令。
步骤2:执行变量替换后的命令字符串
3.获取最后一个参数
4. 使用eval 技术实现shell 控制结构
使用eval 技术实现shell 控制结构
!/bin/bashevalit(){ if [ $cnt=1 ];then eval $@ return else let cnt=’cnt-1′ evalit $@ fi eval $@}cnt=$1#$*, 保存为$IFS A由指定分隔符分隔的字符串组。 #$@,原样保存参数列表,即’$1”$2′.echo $cnt | egrep ‘^[1-9][0-9]*$’ /dev/nullif [ $? -eq 0];然后转移evalit $@else echo ‘错误!检查您的输入!’fi
输出结果:
注意:bash中有两个非常特殊的变量,它们存储参数列表。
这里我使用函数递归和eval来实现for结构。
当eval $@执行时,它会经历以下步骤:
步骤1,拆分成eval $@
第6步,将$@展开为主机名
第11步、找到内置命令eval
重复命令行处理,步骤11,找到hostname命令并执行。
总结
eval 是Bash Shell 命令行处理规则的灵活应用,从而构造“智能”命令来实现复杂的功能。上面提到的命令是eval的一个非常常见的应用。它重复一次命令行参数传递过程并纯粹执行命令。其实这就是bash的难点,也是高级bash程序员的必备技能。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/112845.html
用户评论
各自安好ぃ
终于有人好好解释了eval!我一直觉得这个命令很神秘,害怕用错,现在学习一下就更放心了,以后可以尝试用在一些简单的自动化任务中。
有16位网友表示赞同!
恰十年
这篇文章写得真好!通俗易懂,而且实验说明也很详细,让我一下子就理解了eval命令的作用和用法。点赞!
有6位网友表示赞同!
拽年很骚
我一直知道shell有eval这个命令,但总是以为它很复杂不好用,看了你的文章后才发现其实很简单啊!以前一直错过了很多可能性。
有5位网友表示赞同!
泪湿青衫
看这篇文章的时候我一直在想,这个eval命令会不会太危险?如果输入错误的字符串会不会导致安全问题呢?
有9位网友表示赞同!
一个人的荒凉
作者写的很好,把eval命令解释清楚了,而且还用实验说明加深理解。希望以后还能出一些关于shell脚本的其他教程!
有15位网友表示赞同!
空巷
这篇文章真的太棒了!我昨天刚遇到一个需要用到eval命令的问题,现在正好可以参考你的文章解决掉了! 感谢作者分享
有7位网友表示赞同!
孤独症
不过我觉得文章中缺乏对eval命令的风险控制的讨论,比如如果在实际应用中,用eval执行用户输入的语句,可能会导致安全问题。建议作者能补充一些关于如何安全的运用eval命令的内容。
有18位网友表示赞同!
怪咖
讲真,我一点都不懂shell脚本,看到这个标题就头疼了。不过这篇文章写得还好,至少让我对eval命令有了基本的认识。希望以后还能出一些更基础的教程!
有7位网友表示赞同!
坠入深海i
文章写的很详细很清晰,实验说明也很到位,但是我对shell脚本还是很不熟悉,希望以后能推出更多讲解基础知识的文章,方便像我这种初学者理解学习!
有6位网友表示赞同!
巷口酒肆
终于找到了解释eval命令的文章!我之前一直在网上找答案都没找到合适的,感谢作者分享!
有9位网友表示赞同!
安陌醉生
这篇文章真的太有用啦! 我现在正好在用shell脚本做自动化工作,eval 命令就成了我的必备武器。 希望以后还能学习到更多shell脚本的知识!
有20位网友表示赞同!
酒笙倾凉
我觉得文章写的不错,虽然我知道eval命令的作用,但是没有经过你这么详细的解释和实验说明依然很难真正理解它的应用场景。我需要花点时间好好体会一下
有10位网友表示赞同!
◆残留德花瓣
作者写的真仔细!从基本概念到实际应用都有详细讲解,特别是实验说明能帮助理解原理,不过对于新手来说学习shell脚本还是比较困难的。
有11位网友表示赞同!
凉城°
这篇文章简直太赞了!终于明白eval命令为何会被误解读为危险的命令了。原来只要谨慎使用,它也是一个非常强大的工具!以后可以更加大胆地运用在一些数据处理任务中!
有16位网友表示赞同!
眼角有泪°
学习shell脚本是一件很有挑战的事情,特别是那些复杂的命令, 感觉自己永远学不会。 感谢这位作者分享实用干货,让我对eval 命令有了新的认识!
有15位网友表示赞同!
龙吟凤
这篇文章解释得非常到位,对于初学者来说很友好。我最近正在学习shell scripting, 这篇博客给了我很大的帮助!
有14位网友表示赞同!
陌颜
之前一直以为eval命令只有危险的应用场景,没想到还有这么多实用方法! 感谢作者深入浅出的讲解,让我对eval 命令有了新的认知
有8位网友表示赞同!