我刚刚在 bash(版本 4.2.25(1)-release)中发现了以下结果:
$ true; echo "${PIPESTATUS[@]}"
0
$ ! true; echo "${PIPESTATUS[@]}"
0
$ false; echo "${PIPESTATUS[@]}"
1
$ ! false; echo "${PIPESTATUS[@]}"
1
$ true && false; echo "${PIPESTATUS[@]}"
1
$ true && ! false; echo "${PIPESTATUS[@]}"
1
因此,$PIPESTATUS
似乎在所有情况下都忽略了否定。这是一个已知的问题?我找不到任何关于它的信息。或者这是一种通缉行为?如果是这样,其背后的原因是什么?
使用 subshell 时,一切正常:
$ (true && ! false); echo "${PIPESTATUS[@]}"
0