为什么首先执行命令替换?

为什么首先执行命令替换?

我正在研究 Bash shell。当我通过以下方式输入命令时

cmd1 $(cmd2) $(cmd3)

执行命令的顺序是: cmd2-> cmd3->cmd1

当我看着外壳操作Bash shell 的命令,我无法完全掌握这种情况。

您能否准确指定 Bash shell 如何处理“命令替换”?例如,标记化是否在每次命令替换时递归返回?

答案1

原因是命令替换与任何其他 shell 扩展一样,旨在提供一种生成用于执行命令的命令行参数的动态方法。因此,为了使用和cmd1的输出作为参数运行,必须首先运行这两个。cmd2cmd3

可以找到 shell 扩展的确切顺序,例如在 Bash 手册中。命令替换排在大括号扩展之后的第二位,与波形符扩展、参数(即变量)扩展和算术扩展处于同一位置。评估那些具有相同等级的扩展“以从左到右的方式”,即按照它们在命令行中出现的顺序。

这将要求在嵌套替换的情况下,例如

cmd1 $(cmd2 $(cmd3)) $(cmd4)

顺序将是cmd3-> cmd2-> cmd4->cmd1因为第一个扩展$(cmd2 $(cmd3))本身需要扩展$(cmd3),然后扩展$(cmd4), 在结果传递给调用之前cmd1

相关内容