eval命令的使用

eval

eval arg1 [arg2] ... [argN]

将表达式中的参数,或者表达式列表,组合起来,并且评估它们.包含在表达式中的任何变量
都将被扩展.结果将会被转化到命令中.这对于从命令行或者脚本中产生代码是很有用的.

写了个脚本测试

#!/bin/bash
y=`eval ls -l`
echo "$y"
echo "--------------------------------------"
for i in ls df
do
value=eval $i
echo $value
done
exit 0

输出

[root@nms probe_test]# ./eval.sh
总计 24
-rwxr-xr-x 1 oracle oinstall 157 04-14 09:29 29.5.sh
-rwxr-xr-x 1 oracle oinstall 108 04-14 12:12 29.6.sh
-rwxr-xr-x 1 oracle oinstall  93 04-14 12:47 33.sh
-rwxr-xr-x 1 oracle oinstall 139 04-14 14:19 eval.sh
-rwxr-xr-x 1 oracle oinstall  34 04-14 08:40 restart.sh
-rwxr-xr-x 1 oracle oinstall  44 04-14 09:06 test.sh
--------------------------------------
29.5.sh  29.6.sh  33.sh  eval.sh  restart.sh  test.sh

文件系统               1K-块        已用     可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
                      23297916   8251172  13844160  38% /
/dev/hda1               101086     10784     85083  12% /boot
tmpfs                   257800         0    257800   0% /dev/shm
/dev/hdb1              1031800     17692    961696   2% /mnt/ultrapower

 

这里可以看出使用了eval后,eval将会评估"df"和"ls",他们被解释成命令,而不是字符串本身

如果去掉eval又有啥不同呢?

看输出

[root@nms probe_test]# ./eval.sh
总计 24
-rwxr-xr-x 1 oracle oinstall 157 04-14 09:29 29.5.sh
-rwxr-xr-x 1 oracle oinstall 108 04-14 12:12 29.6.sh
-rwxr-xr-x 1 oracle oinstall  93 04-14 12:47 33.sh
-rwxr-xr-x 1 oracle oinstall 134 04-14 14:21 eval.sh
-rwxr-xr-x 1 oracle oinstall  34 04-14 08:40 restart.sh
-rwxr-xr-x 1 oracle oinstall  44 04-14 09:06 test.sh
--------------------------------------
ls
df

第一个去掉eval并无什么不一样,因为使用了``,第二个eval去掉了,就把df和ls当初字符串来解释了。

 

有一个例子

运行脚本的 shell 一般都是非交互的shell. 但脚本仍然可以存取它拥有的终端. 脚本里甚至可
以仿效成可交互的 shell

这个例子不知道在实际写脚本的时候会有什么用,先记录下

#!/bin/bash
my_prompt='$'
while :
do
echo -n "$my_prompt"
read line
eval "$line"
done
exit 0

输出

[root@nms probe_test]# ./33.sh
$ls
29.5.sh  29.6.sh  33.sh  eval.sh  restart.sh  test.sh
$ll
./33.sh: line 7: ll: command not found

 

会把读入的line当做命令来执行

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值