【Linux】shell脚本下的命令代换` `和$() 以及eval

命令代换

命令替换(command substitution)是指 Shell 执行命令并将命令替换部分替换为执行该命令后的结果。
命令代换有两种方式: command 和 $(command)

command 注意是:反引号 (在!左边的那个)

这里写图片描述

既然两种方式都可以用来命令替换,那他们肯定存在不同之处
(1)反引号容易与单引号混淆
(2)反引号执行命令替换时,会对其中的command命令中包含的 \ 进行跳脱处理
这里写图片描述

我们知道,shell里的单引号会保持所有字符的字面值,所以引号里的执行结果应该是 \ 。但是用反引号输出的结果却是 \ ,这就是由于它对 \ 进行了跳脱处理。

(3)嵌套的命令替换
在多层次的复合替换中,反引号须要额外的跳脱( ` )处理,而 $( ) 则比较直观。例如:
cmd1cmd2你这么写就是错的。需要`cmd1\`cmd2\如果有多个命令嵌套就比较复杂了。而用 () (cmd1 (cmd2 (cmd3)))
这里写图片描述

注:反引号 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高。而 $() 并不见的每一种 shell 都能使用.

eval命令

功能说明:告知shell取出eval的参数,重新运算求出参数的内容。
语  法:eval [参数]
补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行。
参  数:参数不限数目,彼此之间用分号分开。
eval执行命令行前扫描两次,再次运算求出参数内容,eval是对Bash Shell命令行处理规则的灵活应用,进而构造”智能”命令实现复杂的功能。
这里写图片描述

eval也可获取最后一个参数

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值