为什么当您运行替换命令时,执行顺序被破坏,如下例所示。首先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 1
并echo 2
执行,将它们的输出写入标准输出,shell 会累积这些输出以用于命令替换。然后chmod
执行,并将其错误消息输出到标准错误,该错误消息直接进入终端,因此首先出现。最后,外部echo
运行命令替换的结果“1 2”。