在shell编程中$(cmd) 和 `cmd` 之间有什么区别

问题:

要将命令的输出作为变量存储在 sh/ksh/bash 中,你可以执行以下任一操作

var=$(cmd)

var=`cmd`

这两种方法之间有什么区别?


回答:

它们的行为相同。反引号形式是传统的命令替换方法,由 POSIX 支持。然而,除了最简单的用途外,所有用途都很快变得复杂。尤其是,嵌入的命令替换和/或双引号的使用需要小心地使用反斜杠字符进行转义

在这里插入图片描述

区别是 $() 比 `` 更易于嵌套。

var=$(echo foo$(echo bar))

var=`echo foo\`echo bar\``

的可读性更好。

在 Bash 中使用反引号有几点需要注意:

  • 嵌套在反引号中的命令会在当前 shell 环境中执行,所以它可以修改环境变量、当前目录等。
  • 如果内嵌命令成功执行但没有输出,反引号会被替换为空字符串。
  • 你可以在反引号中使用变量,它们的值会在内嵌命令执行时扩展。
  • 反引号中的命令不能以新行结束,必须在同一行。
  • $(...) 格式相比,反引号是 bash 的传统格式,但是 $(...) 更清晰,更容易阅读和调试。

参考:

  • stackoverflow question 4708549
  • https://www.gnu.org/software/bash/manual/bash.html#Command-Substitution

相关阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值