eval 是 shell 内置命令,它可以将一个变量中包含的字符串扩展成 shell 脚本并执行。当我们通过字符串拼接的方式生成一个 linux 命令时,可以用 eval 来执行它。
假设 employee.dat 文件的每一行描述了一个员工的基本信息,包含三列,分别是:姓名,邮箱,岗位类型,例如:
$ cat ./employee.dat
zhoumin [email protected] dev
zhangsan [email protected] test
则 info_employee.sh 脚本可以根据员工的姓名查看其它信息:
#!/bin/sh
[ -z "$1" ] && echo "Usage: $0 name" && exit -1
file=employee.dat
name=$1
email=-
job=-
eval `cat $file |sed -n -e "/^$name[ ]*\([0-9a-z@.]*\)[ ]*\(.*\)/s//email='\1';job='\2'/p"`
echo "user: $name"
echo "email: $email"
echo "job: $job"
其中,eval 很好的解决了在 sed 中对变量进行赋值的问题,执行效果如下:
$ ./info_employee.sh zhoumin
user: zhoumin
email: [email protected]
job: dev
$ ./info_employee.sh zhangsan
user: zhangsan
email: [email protected]
job: test