带逗号的 Bash extglob 模式

带逗号的 Bash extglob 模式

假设extglob在 Bash 中打开(我使用 5.0.11(1)-release (x86_64-apple-darwin18.6.0))并且我们有一个名为list89988777,,,,,+--.txt.我无法让 a,以 extglob 模式工作,[...]除非我不仅转义逗号,而且转义所有与之相关的内容(如果 the,是 a 中的第一个)[..],这对我来说没有意义。因此:

ls *+([[:digit:]]|[\,\-\+]).txt有效,也有效

ls *+([[:digit:]]|[[:punct:]]|[-\,+]).txt

ls *+([[:digit:]]|[[:punct:]]|[-+\,]).txt

ls *+([[:digit:]]|[\,-+]).txt不起作用。

问题可以用 来解决ls *+([[:digit:]]|[[:punct:]]|[-+]).txt,它有效,或者就此而言,ls *+([[:digit:]]|[[:punct:]]|[,-+]).txt它也有效。但是,如果第一个字符是 a ,为什么转义,和所有其他字符都是必需的?[...],

答案1

功劳归于在评论中回答问题的用户(但随后评论消失了)。

导致问题的不是“内部” ,,而是“内部”,因为它创建了一个范围。因此,转义是不必要的,我们只需要确保它是集合中的第一个或最后一个。-[...],-

相关内容