tes*_*ter 1 bash command-substitution
我正在研究 Bash shell。当我通过以下方式输入命令时
cmd1 $(cmd2) $(cmd3)
Run Code Online (Sandbox Code Playgroud)
执行命令的顺序是:
cmd2
-> cmd3
->cmd1
当我查看Bash shell的shell操作顺序时,我无法完全掌握这种情况。
您能否准确指定 Bash shell 如何处理“命令替换”?例如,标记化是否在每次命令替换时递归返回?
原因是命令替换与任何其他 shell 扩展一样,旨在提供一种生成用于执行命令的命令行参数的动态方法。因此,为了cmd1
使用cmd2
和的输出cmd3
作为参数运行,必须首先运行这两个。
shell 扩展的确切顺序可以在例如Bash 手册中找到。命令替换排在大括号扩展之后的第二位,与波形符扩展、参数(即变量)扩展和算术扩展处于同一位置。那些具有相同等级的扩展被“以从左到右的方式”评估,即按照它们在命令行上出现的顺序。
这将要求在嵌套替换的情况下,例如
cmd1 $(cmd2 $(cmd3)) $(cmd4)
Run Code Online (Sandbox Code Playgroud)
顺序将是cmd3
-> cmd2
-> cmd4
->cmd1
因为第一个扩展$(cmd2 $(cmd3))
本身需要扩展$(cmd3)
,然后扩展$(cmd4)
, 在结果传递给调用之前cmd1
。
归档时间: |
|
查看次数: |
325 次 |
最近记录: |