命令代换``和$()的学习以及eval命令的了解

概述

我呢在初始了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=test
eval echo $NAME 等价于 echo $NAME

3.eval命令可以显示出传递给脚本的最后一个参数

4.eval命令可以给变量一个值


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值