问题描述
我刚刚发现这里bash的extglob shell选项: -
How我可以使用逆或负通配符时图案在Unix / Linux外壳匹配?
这是使用禁用了javascript -s extglob中也提到禁用了javascript -u extglob将其关闭所有的答案。
我为什么要关掉如此有用的东西吗?事实上,为什么不是在默认情况下?
presumably它有提供一些讨厌的惊喜的潜力。
它们是什么?
没有讨厌的惊喜 - 默认关闭行为只是为了与传统的,符合标准的模式语法兼容
这就是说:这是可能的(虽然不太可能),有人写 FO +(O)*
的实际上意的的<$ C $。 C> + 和括号被视为其code匹配模式的字面部分。对于bash国米preT以不同的方式比POSIX SH规范要求什么,这个前pression将破坏兼容性,这是对现在默认在极少数情况下完成的(回声-e
与 xpg_echo
取消设置在于立即想到的唯一的一个)。
这是从那里bash的扩展是由POSIX标准的扩展行为未定义通常的情况不同 - 情况基线POSIX外壳通常会抛出一个错误,但代替庆典提供了一些新的和不同明确记录的行为 - 因为需要处理这些字符匹配本身是由POSIX定义
要引用的相关部分,与强调说:
Thus, the standard explicitly requires any non-NUL character other than ?
, *
or [
or those listed elsewhere as requiring quoting to match themselves. Bash's behavior of having extglob off by default allows it to conform with this standard in its default configuration.
However, for your own scripts and your own interactive shell, unless you're making a habit of running code written for POSIX sh with unusual patterns included, enabling extglob
is typically worth doing.
这篇关于为什么我不会离开在bash启用extglob?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!