命令中的 $() 是什么?

Mic*_* TM 24 shell bash command

什么是$()在Linux的shell命令?

例如:

chmod 777 $(pwd)
Run Code Online (Sandbox Code Playgroud)

cha*_*aos 28

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

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

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

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

  • 反引号也可以嵌套。请注意,从命令的输出中删除了尾随换行符。 (4认同)
  • 是的:就像`echo \`echo \\`echo foo\\`\` bar` (3认同)
  • @StéphaneChazelas 如何嵌套反引号?你的意思是过度逃避? (2认同)
  • 有官方参考说反引号已被弃用吗? (2认同)

vin*_*c17 5

在 POSIX 或类似 POSIX 的 shell ( ksh, bash, ash, zsh, yash...) 中,它就像``:执行内部命令$()并替换为其标准输出。除非$()在双引号内,否则会完成分词和文件名生成。因此

chmod 777 $(pwd)
Run Code Online (Sandbox Code Playgroud)

应替换为:

chmod 777 "$(pwd)"
Run Code Online (Sandbox Code Playgroud)

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

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

chmod 777 "$PWD"
Run Code Online (Sandbox Code Playgroud)

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

或者甚至更好:

chmod 777 .
Run Code Online (Sandbox Code Playgroud)

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