Answers:
这与反引号``非常相似。
这称为命令替换(posix规范),它调用一个子shell。$()
反引号(``)或之间的命令在子shell中执行,然后将输出放置在原始命令中。
与反引号不同,$(...)
表单可以嵌套。因此,您可以在另一个替换中使用命令替换。
替换中的转义字符也存在差异。我喜欢$(...)
表格。
echo `echo \`echo foo\`` bar
在POSIX或POSIX状壳(ksh
,bash
,ash
,zsh
,yash
...),它就像``
:命令内部$()
被执行,并在它的标准输出代替。除非$()
在双引号中,否则将完成单词拆分和文件名生成。从而
chmod 777 $(pwd)
应替换为:
chmod 777 "$(pwd)"
避免在当前工作目录路径上进行单词拆分和文件名生成。
甚至更好(如果目录已重命名,则在某些shell下(例如zsh)除外):
chmod 777 "$PWD"
因为$PWD
是一个特殊变量,用于保存POSIX shell中当前工作目录的路径。
甚至更好:
chmod 777 .
由于.
当前目录中的条目是指向该目录本身的硬链接。