shell学习(15)- eval及shell No such file or directory解决办法
eval可以读取一连串的参数,然后按照参数特性来执行。参数数目不限,彼此之间用分号隔开。
eval会对后面的命令进行两遍扫描,如果第一遍扫描后,命令是个普通命令,则执行此命令;如果命令中含有变量的间接引用,则保证间接引用的语义。也就是说,eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。因此,eval命令适用于那些一次扫描无法实现其功能的变量。
eval 执行以下两个步骤:
第一步,执行变量替换,类似与C语言的宏替代;
第二步,执行替换后的命令串。
下面看几个例子:
X=
Y=X
echo '$'$Y
eval echo '$'$Y
输出如下:
$X
10
[kumufengchun@localhost ~]$ vim test.sh
[kumufengchun@localhost ~]$ WORD="cat test.sh"
[kumufengchun@localhost ~]$ echo $WORD
cat test.sh
[kumufengchun@localhost ~]$ eval $WORD
Hello World
这些需要进行两次扫描的变量有时被称为复杂变量。不过这些变量本身并不复杂。eval命令不仅可以回显复杂变量,也可以用于回显简单变量。
[kumufengchun@localhost ~]$ NAME=filename
[kumufengchun@localhost ~]$ echo $NAME
filename
[kumufengchun@localhost ~]$ eval echo $NAME
filename
在编写shell脚本的时候也会经常出现“/bin/grep: |: No such file or directory”类似的错误,特别是在执行的命令是变量的情况
[root@bogon script]# cat aa.sh
aa="/bin/grep Accepted /root/test.log | /bin/grep -v something"
tmp=`$aa`
[root@bogon script]# bash aa.sh
/bin/grep: |: No such file or directory
/bin/grep: something: No such file or directory
解决方法可以使用eval命令
[root@bogon script]# cat aa.sh
aa="/bin/grep Accepted /root/test.log | /bin/grep -v something"
tmp=`eval $aa`
[root@bogon script]# bash aa.sh
[root@bogon script]#
[root@bogon script]#
[root@bogon script]# cat dd.sh
X=
Y=X
echo '$'$Y
echo $$Y
echo ${$Y}
eval echo '$'$Y
[root@bogon script]# bash dd.sh
$X
40342Y
dd.sh: line : ${$Y}: bad substitution
shell学习(15)- eval及shell No such file or directory解决办法的更多相关文章
- 执行shell脚本时提示bad interpreter:No such file or directory的解决办法
执行shell脚本时提示bad interpreter:No such file or directory的解决办法 故障现象:在终端直接cd /var正常,在shell脚本中执行则报错.原因是脚本是 ...
- Shell学习(二)Shell变量
一.Shell变量 变量的定义 例子: my_job="Learn Shell" PS:变量名和等号之间不能有空格!!! 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头 ...
- troubleshooting-执行导数shell脚本抛异常error=2, No such file or directory
Cannot run program "order_log.sh" (in directory "/data/yarn/nm/usercache/chenweidong/ ...
- linux执行shell脚本时提示bad interpreter:No such file or directory的解决办法
故障现象:在终端直接cd /var正常,在shell脚本中执行则报错.原因是脚本是在windows平台下写的,换行符与Linux不同,造成脚本不能正确执行 出现bad interpreter:No s ...
- shell学习:几道常见shell习题
1. 编写shell脚本,计算1-100的和: #! /bin/bash sum=0 for i in `seq 1 100`; do sum=$[$i+$sum] done echo $sum 计算 ...
- shell学习1---基本的shell命令
基本脚本 反引号: `` 反引号里面的内容是命令行,通过反引号用户可以将shell命令的输出赋给变量,比如: test=`date +%y%m%d` echo "The time is : ...
- shell学习笔记2---执行Shell脚本(多种方法)
在新进程中运行 Shell 脚本 1) 将 Shell 脚本作为程序运行 切换到脚本所在位置(还要给脚本加上可执行权限) [mozhiyan@localhost demo]$ ./test.sh #执 ...
- shell学习(17)- shell中2>&1的解释及输入输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...
- Shell学习(五)Shell输出命令
一.echo命令 #1.直接显示字符串 echo "It is a test" #输出:It is a test #2.显示转义字符 echo "\"It is ...
随机推荐
- 使用tomcat脚本开启服务
参考:https://www.cnblogs.com/fps2tao/p/8488596.html 1.编写tomcat脚本 在/etc/init.d/目录下创建tomcat服务脚本文件 cd /e ...
- 在PyCharm中导入Numpy和Pygame模块 (win8.1)
我用的是anaconda安装python3.6 已经在终端 pip install numpy 但是在pycharm运行程序出现错误:ImportError: No module named nump ...
- js中的观察者模式与发布者/订阅者模式的区别?
- vue项目中实现扫码功能
项目地址:https://github.com/wkl007/vue-scan-demo.git 项目主要是做的一个扫码的功能 核心代码为 <div class="scan" ...
- vw单位相关
1.相对于视口的宽度.视口被均分为100单位的vw h1 { font-size: 8vw; } 如果视口的宽度是200mm,那么上述代码中h1元素的字号将为16mm,即(8x200)/100 2.相 ...
- 读书笔记--Head First Networking目录
1.解决物理网络 2.规划网络布局 3.工具和故障排除 4.包分析 5.网络设备和流量 6.连接网络的路由器 7.路由协议 8.域名系统 9.监控和故障排除 10.无线网络 11.网络安全 12.网络 ...
- OCR Tesseract 识别报 empty page解决办法
图片分辨率太低导致 周边加空白 然后重新操作,就行了
- LINUX普通猫的拔号工具介绍
普通猫分为串口和PCI的,请查看 <关于网络设备概述 > 普通猫的拔号工具主要有kppp和wvdial:在Redhat/Fedora中,用system-config-network 或re ...
- Uva11384 Help is needed for Dexter
Dexter is tired of Dee Dee. So he decided to keep Dee Dee busy in a game. The game he planned for he ...
- 洛谷P2982 [USACO10FEB]慢下来Slowing down [2017年四月计划 树状数组01]
P2982 [USACO10FEB]慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) c ...