gpt4 book ai didi

bash - bash 中 `set -o` 选项的预期有效顺序是什么? `histexpand` 胜过 `posix` 吗?

转载 作者:行者123 更新时间:2023-11-29 08:57:51 26 4
gpt4 key购买 nike

几个小时前我试图回答一个问题,我认为它揭示了 bash POSIX mode 中的一个有点模糊的错误。 .我匆忙地强烈告诉我事实并非如此。自相矛盾的答案明确表示这不是错误,因此被选为正确答案。

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

我的(所谓的)错误:

set -o histexpand(通常是隐式的)
设置-o posix
回显“#!/”

嗯,应该回显 #!/。 (它适用于任何其他外壳)。但是在 bash 中打印到标准输出

!/: 事件未找到

然后返回0。

所以在我看来,bash 的隐式 set -o histexpand 在极少数情况下违反了 POSIX 标准,并且不会为 set -o posix

set -o posix 的文档阅读:

在默认操作不同于 POSIX 标准的情况下更改 Bash 的行为...这旨在使 Bash 的行为成为该标准的严格超集。

而且我一直认为这意味着当其他 set 选项相互矛盾时,这个选项应该取代它们?这似乎不是 48 enumerated differences 之一任何一个。

不是这样的吗?我错过了什么?

最佳答案

来自Bash POSIX Mode reference期待您看到的行为 - 它没有在该列表的任何地方说明历史数字(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

POSIX Shell Command Language documentation 中均未提及这些(我先在 man bash 中查找了他们的简写),并且 interactive-comments 没有在任何地方提到

关于bash - bash 中 `set -o` 选项的预期有效顺序是什么? `histexpand` 胜过 `posix` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21496049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com