为什么我不能在bash中启用extglob?
我刚刚发现了关于bash extglob shell选项在这里: –
How can I use inverse or negative wildcards when pattern matching in a unix/linux shell? 所有的使用shopt -s extglob的答案也提到了shopt -u extglob关闭它。
没有令人讨厌的惊喜 – 默认关闭行为只是为了兼容传统的,符合标准的模式语法。
这就是说:这是可能的(虽然不太可能),有人写fo(o)。*实际上意图和括号被视为模式匹配的模式部分的代码。对于bash以不同于POSIX sh规范所要求的方式来解释这个表达式将是破坏兼容性,这是默认情况下在很少的情况下(echo -e与xpg_echo unset是唯一立即到达心神)。 这不同于通常的情况,其中bash扩展是扩展行为未定义的POSIX标准 – 一个基准的POSIX shell通常会抛出一个错误,但bash相反提供一些新的和不同的明确记载的行为 – 因为需要治疗这些字符作为匹配自身由POSIX定义。 引用the relevant part of the specification,重点补充:
因此,标准明确地要求除了,*或[或在别处列出的要求引用以匹配自身的任何非NUL字符。 Bash默认情况下关闭extglob的行为允许它在默认配置中符合这个标准。 然而,对于你自己的脚本和你自己的交互式shell,除非你习惯于为包含不寻常模式的POSIX sh编写代码,启用extglob通常是值得的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angular – 未捕获(承诺):错误:无法找到加载’Achivement
- angularjs – Visual Studio Code为* .d.ts文件中定义的类型
- 在循环中的bash shell脚本中执行ssh命令
- angular – 在添加新项目时保持列表中的滚动位置
- string – Vim将所有字符替换为第一个逗号
- 在UNIX中将unix时间戳转换为date
- 客户端调用WebService方式总结
- Angular2 CustomReuseStrategy在使用参数进行路由时创建组件
- vim – 访问vi命令历史记录时使用箭头的替代方法
- 【Docker实战之入门】firstrun_maria详细注释