shell---反引号,$( )以及eval的比较

1.反引号“ 和$( )的相同点:

反引号是将“中的命令执行,再将执行结果替换到代码所在地,交给外层显示,即将命令的结果作为输入或输出。

$( )和反引号都是用于命令的替换

编写一个脚本,显示出HOME目录:
这里写图片描述

执行结果,与预期相同:
这里写图片描述

2.反引号“ 和$( )的区别:

对于很多命令,虽然反引号和$( )的的输出结果相同,但是有一个字符却可以区别它们,那就是转义字符\

①先看它们对于一个转义字符的处理:
这里写图片描述

结果如图:
这里写图片描述

可以看到,与预期结果不同,反引号仍然显示出HOME目录,并没有进行转义,而$( )成功转义。

②再加一个转义字符时:
这里写图片描述

结果如图:
这里写图片描述

此时,反引号成功转义,打印出字符串,而$( )将第二个\进行转义显示,然后再显示出HOME工作目录。

③再观察对于多个\,它们的处理情况:
这里写图片描述

结果如图:
这里写图片描述

一共有8个\,倒反号执行后打印出2个,而$( )打印出4个

因此,可以得到结论:
①反引号对于转义字符\,只有出现两个以上转义字符时,才会起到转义的作用,否则,它会执行命令本身,所以,对于反引号,可以将两个\当做一般的一个\使用;
②$( )对于转义字符\,和一般处理情况相同,只有一个\就可以进行转义;

3.eval的使用

作用:eval命令适用于那些一次扫描无法实现其功能的变量,对于这些复杂变量,eval会进行两次扫描。它会先扫描所有命令行进行命令替换,然后再执行该命令。

①eval虽然用于复杂变量,但也可以回显简单命令:
这里写图片描述

这里写图片描述

②eval可以两次扫描变量,先进行命令替换,然后执行命令
这里写图片描述

结果如图,echo打印出字符串,而eval执行了命令:
这里写图片描述

③eval可以用来获取最后一个参数:
如设置参数111 222 333 444,要取得最后一个参数,一般会使用 $#,但我们可以看到使用后,并没有出现预期结果,但是可以使用eval得到最后一个参数:
这里写图片描述

4.反引号,$( )与eval的区别:

eval可以扫描复杂变量,并执行变量中的命令,反引号也可以执行复杂变量,但打印结果时,不会换行,$( ) 不能处理复杂变量:

这里写图片描述

结果如图:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值