“命令替换”中的命令顺序不正确(Bash/Dash)

“命令替换”中的命令顺序不正确(Bash/Dash)

为什么当您运行替换命令时,执行顺序被破坏,如下例所示。首先chmod执行命令,echo 1然后echo 2

echo $(echo 1; echo 2; chmod 444 nonexistent_file)

结果:

chmod: Cannot access 'nonexistent_file': No such file or directory
1 2

答案1

执行顺序没有被破坏,输出顺序不是您所期望的。

echo 1echo 2执行,将它们的输出写入标准输出,shell 会累积这些输出以用于命令替换。然后chmod执行,并将其错误消息输出到标准错误,该错误消息直接进入终端,因此首先出现。最后,外部echo运行命令替换的结果“1 2”。

相关内容