有两种方法可以捕获 bash
中命令行的输出:
旧版 Bourne shell 反引号
``
:var=`command`
$()
语法(据我所知,这是 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/