分配类似于具有退出状态的命令,除了何时有命令替换?
请参阅以下示例及其在POSIX Shell中的输出: false;echo $?或false || echo 1:1 false;foo="bar";echo $?或foo="bar" && echo 0:0 foo=$(false);echo $?或foo=$(false) || echo 1:1 foo=$(true);echo $?或foo=$(true) && echo 0:0 正如在/programming/6834487/what-is-the-variable-in-shell-scripting中投票最高的答案所提到的: $? 用于查找最后执行的命令的返回值。 在这种情况下,这可能有点误导,因此让我们获取POSIX定义,该定义也在该线程的帖子中被引用: ?扩展到最新管道的小数退出状态(请参见管道)。 因此,它仿佛是一次分配本身算作一个命令(或者说管道部分)以零退出值,但其应用之前分配的右侧(例如,在我的例子命令替换调用这里)。 我从实际的角度看这种行为是有道理的,但对我而言,分配本身按该顺序进行计数似乎有点不寻常。也许要弄清楚为什么对我来说很奇怪,让我们假设赋值是一个函数: ASSIGNMENT( VARIABLE, VALUE ) 那foo="bar"会是 ASSIGNMENT( "foo", "bar" ) 并且foo=$(false)会像 ASSIGNMENT( "foo", EXECUTE( "false" ) ) 这意味着先EXECUTE运行,然后才运行,但这仍然是重要的状态。 ASSIGNMENTEXECUTE 我的评估是否正确,或者我误会/遗漏了什么?这些是我将这种行为视为“奇怪”的正确原因吗?