【发布时间】:2015-07-30 03:52:08
【问题描述】:
我今天在 globbing 时看到 Bash Shell 的行为有些奇怪。
所以我使用以下 Glob 运行 ls 命令:
ls GM12878_Hs_InSitu_MboI_r[E1,E2,F,G1,G2,H]* | grep ":"
结果符合预期
GM12878_Hs_InSitu_MboI_rE1_TagDirectory:
GM12878_Hs_InSitu_MboI_rE2_TagDirectory:
GM12878_Hs_InSitu_MboI_rF_TagDirectory:
GM12878_Hs_InSitu_MboI_rG1_TagDirectory:
GM12878_Hs_InSitu_MboI_rG2_TagDirectory:
GM12878_Hs_InSitu_MboI_rH_TagDirectory:
但是,当我通过引入下划线来更改相同的正则表达式时
ls GM12878_Hs_InSitu_MboI_r[E1,E2,F,G1,G2,H]_* | grep ":"
我的预期结果是如上所示的完整集,但我得到的是一个子集:
GM12878_Hs_InSitu_MboI_rF_TagDirectory:
GM12878_Hs_InSitu_MboI_rH_TagDirectory:
当我在星号前引入下划线符号时,有人可以解释我的逻辑有什么问题吗?
我正在使用 Bash。
【问题讨论】:
-
顺便说一句——
ls | grep是一种不应该在生产代码中使用的反模式。见mywiki.wooledge.org/ParsingLs -
谢谢!这个页面信息量很大!
标签: regex linux bash shell glob