/文章

shell中的eval命令,实现执行脚本中的字符串...

shell中eval这个命令很神奇,他能够把字符串当作命令来执行 PS:这个字符串必须是可以执行的bash命令才可以.

其实这个命令我也是在偶然之间发现的,当时在看web版QQ的密码加密js脚本,里边有这么一句

eval("var temp = '" + str + "'");

当时很是不解,他为什么会写这个,然后百度了一下js中的eval,知道了的作用,但是更不解的是他为什么要用eval来执行赋值语句.

当我想用其它的语言转写的时候发现了其中的奥秘所在,这个eval有自己的默认的编码格式,比较特殊,所以腾讯用这个来执行赋值语句就相当于把他重新编码了一遍,至今未能找到什么好的办法解决,只能通过Nodejs来执行这个js脚本实现加密的功能.   说的有点多,言归正传.

 

当时我看了一下perl也有这个命令,和js中也是一样的功能,今天我需要进行批量copy文本的操作,几十个文件那,有点失落...

忽然间想起以前看过这个命令,果断翻阅脚本,  哈哈  被我找到了.

不说多说了,看下代码吧

count=1
cat 123| while read line        #cat 命令的输出作为read命令的输入,read读到的值放在line中 
do
        line_tmp=`echo "$line" | sed 's/rls/test/g'`
   echo "cp $line $line_tmp" 
 eval "cp $line $line_tmp"
   count=$(($count + 1))
done
exit 0

其中123为文件名,通过read这个命令读取每一行数据到变量,因为我要复制的文件和替换的文件名字里边只需要把rls替换成test就可以了,所以执行sed命令,之后是输出命令字符串.

接下来的才是今天的重点,把拼接起来的字符串当作命令执行,这就是eval的神奇之处.

你也可以用这个来试试eval命令的神奇

eval "ll"

 

 

本文固定链接:http://www.bbtang.info/script/shell/441.html 原文链接:shell中的eval命令,实现执行脚本中的字符串...,转发请注明来源!
2 0

发表评论