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 ...
随机推荐
- Python中的一些模块用法
python中os模块用法 python之模块之shutil模块 -------------------------------os模块-------------------------------- ...
- js 表格合并
1.合并 function autoRowSpan(tbid, row, col) { var tb = document.getElementById(tbid); var lastValue = ...
- Django项目:CRM(客户关系管理系统)--28--20PerfectCRM实现King_admin数据修改美化
{#table_change.html#} {## ————————19PerfectCRM实现King_admin数据修改————————#} {#{% extends "king_mas ...
- ajax请求数据以及处理
html <div class="list-block media-list mp0 mbb" data-infos='infos' style="display: ...
- 根据网站运行日志猜测的百度蜘蛛ip
da大部分文章都是吵来吵去,不准确 所以就不参考那些沙雕的文章了,直接自己统计一个 123.125.71.117 123.125.71.58 220.181.108.115 220.181.108.1 ...
- maven编译报错 错误: -source 1.5 中不支持 lambda 表达式
ji与基于maven的工程java应用程序非web应用的 参考这个https://www.cnblogs.com/softidea/p/6256543.html 但是java应用里边是没有这个配置的, ...
- find()和find_all()的具体使用
在我们学会了BeautifulSoup库的用法后,我们就可以使用这个库对HTML进行解析,从网页中提取我们需要的内容. 在BeautifulSoup 文档里,find().find_all()两者的定 ...
- IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图)
IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图) .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...
- Codeforces 608E. Marbles
E. Marbles time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- 洛谷P1077 [NOIP2012普及组]摆花 [2017年四月计划 动态规划14]
P1077 摆花 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能 ...