bash - 在 shell 脚本中使用 $() 代替反引号有什么好处?

标签 bash syntax sh backticks

有两种方法可以捕获 bash 中命令行的输出:

  1. 旧版 Bourne shell 反引号 `` :

    var=`command`
    
  2. $()语法(据我所知,这是 Bash 特定的,或者至少不受像原始 Bourne 这样的非 POSIX 旧 shell 支持)

    var=$(command)
    

与反引号相比,使用第二种语法有什么好处吗?或者两者完全 100% 等效吗?

最佳答案

主要的一点是能够将它们嵌套起来,即命令中的命令,而不会失去理智试图弄清楚某种形式的转义是否适用于反引号。

一个例子,虽然有些做作:

deps=$(find /dir -name $(ls -1tr 201112[0-9][0-9]*.txt | tail -1l) -print)

这将为您提供 /dir 目录树中所有文件的列表,这些文件与 2011 年 12 月以来最早的日期文本文件同名(a)

另一个例子是获取父目录的名称(而不是完整路径):

pax> cd /home/pax/xyzzy/plugh
pax> parent=$(basename $(dirname $PWD))
pax> echo $parent
xyzzy
<小时/>

(a) 既然特定命令可能实际上不起作用,我还没有测试该功能。因此,如果您对我投反对票,那么您就失去了意图:-) 这只是作为如何嵌套的说明,而不是作为无错误的生产就绪代码片段。

关于bash - 在 shell 脚本中使用 $() 代替反引号有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449778/

相关文章:

Haskell——有什么方法可以关闭 `deriving` 实例的可重新绑定(bind)语法?

bash - 将标准输出重定向到新文件会在 cygwin 中的文件名末尾添加奇怪的字符

bash - os.Exec 和/bin/sh : executing multiple commands

linux - 将脚本通过管道传输到 ssh,无法设置变量

linux - 为什么反引号中的嵌套引号在 bash 中有效?

linux - 在 Bash/Shell 脚本中使用 BuildTools 下载/构建 Minecraft 服务器 jar

javascript - 在 JavaScript 中 for(;;){...} 做什么?

php - 使用 JOINING 表创建 mysql 查询语法

bash - 有没有办法检查是否使用 -x 标志执行 shell 脚本

linux - 当我输入 'vi .bash_profile' 时 ESC 键不起作用