命令代换``和$()的学习以及eval命令的了解
来源:互联网 发布:数据库概念模式 编辑:程序博客网 时间:2024/06/06 10:42
概述
我呢在初始了shell之后呢,在学习shell符号的命令代换这个部分呢,对于这个呢不是很了解,所以就再往上查了查,下面呢我就这个总结一下吧。
命令代换`和$()
在shell中,如果想获得一个命令的返回值,如果为整数,可以直接用$?获取其退出码。
但如果一条命令的返回值不是整数,怎么实现?
这里就不得不提shell下的命令代换功能!
由反引号括起来的也是一条命令,Shell先执行该命令,然后将输出结果立刻代换到当前命令行中。
我们有两种方式实现命令代换功能:
分别是``和$()这两种方式。
反引号`与$()均可执行命令代换,同一条命令的代换,执行的结果是一样的,例如:
运行后可以看到两个的结果是一样的。
但是呢,我们换一种方式再去使用这两个命令代换:
我们在运行后可以看到这里的两个结果是不一样的
用反引号是会输出真正的hostname,但是用$()时只输出命令。
这是因为反引号齐本身就对\进行了转义,保留了其本身意思。而$()中则不需要考虑\的问题。
两者的区别
1.$()看起来比较简洁直观,而``很容易与‘’进行混淆
2.在多层替换中``需要进行转义,比较麻烦
3.``的移植性更强,因为$()不保证所有linux系统都能支持
补充:对eval命令的调研
eval命令用来告知shell取出eval的参数,重新运算求出参数内容。比如:
然后运行可以看到
eval命令还可以做到首先扫描命令行进行所有的替换,然后再执行该命令,比如:
如上图所示:先创建一个文件test,内容由上图显示,然后将”cat test”作为一个字符串赋予变量mytest,直接echo这个变量则其只会打印“cat test”,但是当用eval命令时其则会打印出test文件内容:即其先将变量mytest替换为cat test,最后执行此命令。
所以我们可以得到
1.该命令适用于执行那些一次扫描无法实现其功能的变量,其对变量进行两次扫描,而这些需被两次扫描才能实现其功能的变量称为复杂变量
2.eval命令依然可以回显简单变量,不一定只处理复杂变量,比如:
NAME=testeval echo $NAME 等价于 echo $NAME
3.eval命令可以显示出传递给脚本的最后一个参数
4.eval命令可以给变量一个值
- 命令代换``和$()的学习以及eval命令的了解
- 【Linux】shell脚本下的命令代换` `和$() 以及eval
- 命令代换‘’和$()和eval命令
- 命令代换``和$()区别,eval命令
- 命令代换$()和``的区别
- 命令代换及eval命令
- [shell 脚本]eval命令和命令代换 ` `和 $()
- shell命令代换与eval命令
- 【shell脚本】命令代换 ` `, $( ) ,整数运算$(( )),变量代换${ },eval命令
- SHELL脚本的命令代换
- shell脚本的命令代换
- shell中反引号和$()的区别以及eval命令
- Linux"和$()的区别以及调研 eval命令
- Linux【Shell脚本】—eval命令和命令代换(`和$())
- eval命令的使用
- redis的eval命令
- 【shell脚本】eval命令详解及命令代换
- Linux下反引号``和$()的比较以及eval命令的调研
- leetcode 486. Predict the Winner
- 【实战经验分享】如何对SSD固态硬盘下发SCSI command?
- 设计模式学习—适配器模式(Adapter Design Pattern)
- java多线程
- 解决IE低版本浏览器兼容性差问题
- 命令代换``和$()的学习以及eval命令的了解
- Selenium在python的操作
- ch追妹(思路题 杭电排位赛-2)
- 《剑指offer》扑克牌顺序
- 2017.7.18记
- HBase region 定位原理
- Leetcode-字符串问题--最长的公共子字符串长度--可不连续--#583
- Java接入253短信发送
- portalms脚本详细概述