bash中“set-o”选项的有效顺序是什么?“histexpand”特朗普“posix”吗?

bash中“set-o”选项的有效顺序是什么?“histexpand”特朗普“posix”吗?,bash,set,posix,standards,sh,Bash,Set,Posix,Standards,Sh,几个小时前,我试图回答一个问题,我相信这个问题揭示了一个在计算机中有点模糊的错误。我被匆忙而强烈地告知情况并非如此。相反的答案,明确表示这不是一个bug,被选为正确答案 因此,我一直在梳理bash文档,但我仍然有着非常相同的印象,所以我想我应该问一下 我(声称)的错误: set-o histexpand(通常是隐式的) set-o posix echo“#!/” 应该,嗯,回音#/。(它在任何其他壳中都可以)。但是在bash中,它却被替换了 打印到标准输出 !/:未找到事件 然后返回0 因此,在

几个小时前,我试图回答一个问题,我相信这个问题揭示了一个在计算机中有点模糊的错误。我被匆忙而强烈地告知情况并非如此。相反的答案,明确表示这不是一个bug,被选为正确答案

因此,我一直在梳理bash文档,但我仍然有着非常相同的印象,所以我想我应该问一下

我(声称)的错误:

set-o histexpand
(通常是隐式的)
set-o posix

echo“#!/”

应该,嗯,回音
#/。(它在任何其他壳中都可以)。但是在bash中,它却被替换了
打印到标准输出

!/:未找到事件

然后返回0

因此,在我看来,bash的隐式
set-o histexpand
在极少数情况下违反了POSIX标准,并且没有为
set-o POSIX
让路

文件内容如下:

更改Bash的行为,其中默认操作不同于POSIX标准。。。这是为了使Bash成为该标准的严格超集。

我一直认为这意味着当其他
set
选项相互矛盾时,这个选项应该取代它们? 这似乎不是其中之一

不是这样吗?我遗漏了什么?

从“我希望你看到的行为”列表中可以看出,列表中的任何地方都没有说明历史编号(在
PS1
PS2
扩展之外)将在
posix
集合中得到不同的处理。另外,由于其他人说这不是一个bug,我想“超集”的意思是,只要没有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

这些都没有在中提到(我首先在
man bash
中查找了他们的速记),并且
交互评论在任何地方都没有提到

要关闭“!”令牌的历史扩展,请使用

set +o histexpand
相反,您有一个“-o”
与直觉相反,“+o”会关闭histexpand。

正确。明确地说,它是英语或数学/逻辑中的子集,而不是超集。显然,“互动评论”不是什么东西(这是我的第一个猜测)。该选项显然意味着“允许通过命令行上遇到的无引号散列符号进行解析”。OP的目的不是关闭历史扩展,而是显式打开它,以查看后续的
set-o posix
是否会隐式关闭它。如果你和我一样好奇,“其他问题”显然是