bash中`set -o`选项的预期有效排序是什么?`histexpand`是否特朗普`posix`?

Geo*_*xon 7 bash standards posix set sh

几个小时前我试图回答一个问题,我认为这个问题在bash POSIX模式中显示出一个有点模糊的错误.我匆匆忙忙告诉我不是这样.这个矛盾的答案,明确地说这不是一个错误,被选为正确的答案.

所以我一直在梳理bash文档,我仍然会得到非常相同的印象,所以我想我应该问.

我的(涉嫌)错误:

set -o histexpand (这通常是隐含的)
set -o posix
echo "#!/"

应该,好吧,回声#!/.(它在任何其他shell中都有).但是在bash中,它会打印到标准输出

!/: event not found

然后返回0.

所以在我看来,bash隐含set -o histexpand在极少数情况下违反了POSIX标准,并没有让位set -o posix.

set -o posix读取文档:

Change the behavior of Bash where the default operation differs from the POSIX standard ... This is intended to make Bash behave as a strict superset of that standard.

而且我一直认为这意味着这个选项set在它们相互矛盾时应该取代其他选项?这似乎也不是48个列举的差异之一.

这不是这种情况吗?我错过了什么?

l0b*_*0b0 5

Bash的POSIX模式参考期待你看到的行为-它并不该列表历史号码(境外的任何地方说PS1PS2扩展)将与区别对待posix集.此外,由于其他人说这不是一个错误,我猜"超集"的含义是,只要没有特定于Bash的设置,shell就会按照POSIX标准运行.

有趣的是,即使您运行bash --noprofile --norc --posix某些特定于Bash的设置,默认情况下也会启用:

bash-4.2$ set -o | grep 'on$'
braceexpand     on
emacs           on
hashall         on
histexpand      on
history         on
interactive-comments    on
monitor         on
posix           on
Run Code Online (Sandbox Code Playgroud)

POSIX Shell命令语言文档中没有提到这些(我先查看了它们的简介man bash),并且interactive-comments在任何地方都没有提到.