bash中“set-o”选项的有效顺序是什么?“histexpand”特朗普“posix”吗?
几个小时前,我试图回答一个问题,我相信这个问题揭示了一个在计算机中有点模糊的错误。我被匆忙而强烈地告知情况并非如此。相反的答案,明确表示这不是一个bug,被选为正确答案 因此,我一直在梳理bash文档,但我仍然有着非常相同的印象,所以我想我应该问一下 我(声称)的错误: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 因此,在
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
是否会隐式关闭它。如果你和我一样好奇,“其他问题”显然是