命令中的 $() 是什么?

命令中的 $() 是什么?

$()Linux Shell 命令中有什么?

例如:

chmod 777 $(pwd)

答案1

它与反引号``非常相似。

它被称为命令替换POSIX规范)并且它调用一个子shell。大括号$()或反引号 ( ) 之间的命令在`…`子 shell 中执行,然后将输出放置在原始命令中。

与反引号不同,该$(...)表单可以嵌套。因此,您可以在另一个替换中使用命令替换。

替换中的转义字符也存在差异。我更喜欢这种$(...)形式。

答案2

在 POSIX 或类 POSIX shell(kshbashashzshyash...)中,它就像:执行``里面的命令并替换为它的标准输出。除非在双引号内,$()否则将完成分词和文件名生成。$()因此

chmod 777 $(pwd)

应替换为:

chmod 777 "$(pwd)"

以避免在当前工作目录路径上进行分词和文件名生成。

或者甚至更好(除了在某些 shell 下,例如 zsh,以防目录已重命名):

chmod 777 "$PWD"

since$PWD是一个特殊变量,它保存 POSIX shell 中当前工作目录的路径。

或者甚至更好:

chmod 777 .

由于.当前目录中的条目是到该目录本身的硬链接。

答案3

$()主要用于在其他命令中执行命令。

chmod 777 $(pwd)

pwd命令给出当前工作目录。因此,当整个过程执行时, pwd 的输出将替换其位置并作为 的参数chmod,结果是您当前的所有工作目录都获得了777我认为永远不应该在生产环境中使用的权限;)。

相关内容