Bash 扩展glob can';t回溯行为

Bash 扩展glob can';t回溯行为,bash,Bash,我看了一本bash指南,其中有一个示例: 我熟悉正则表达式的基本概念,可能这让我感到困惑,因为我正试图将这些概念应用到bash中的扩展globs 我不明白为什么!(my)*.txt正在bash中展开myscript.txt。指南中的解释对我毫无帮助 我的理由是: !(my*).txt与myscript.txt不匹配,因为它确实以my开头,然后与script的其余字符匹配,最后与.txt匹配 !(my)*.txt不匹配(错误!!!)匹配myscript.txt,因为它以my开头,后跟任何字符,

我看了一本bash指南,其中有一个示例:

我熟悉
正则表达式的基本概念
,可能这让我感到困惑,因为我正试图将这些概念应用到bash中的
扩展globs

我不明白为什么
!(my)*.txt
正在
bash
中展开
myscript.txt
。指南中的解释对我毫无帮助

我的理由是:

  • !(my*).txt与
    myscript.txt
    不匹配,因为它确实以
    my
    开头,然后与
    script
    的其余字符匹配,最后与.txt匹配
  • !(my)*.txt
    不匹配(错误!!!)匹配
    myscript.txt
    ,因为它以
    my
    开头,后跟任何字符,最后匹配
    .txt

我的论证哪里错了

这是通配符的常见问题。要问自己的问题是,有没有办法拆分
myscript.txt
,使第一个片段匹配
!(my)
第二个匹配
*.txt


与直觉相反,答案是肯定的:如果将“
”myscript.txt“
拆分为
(空字符串)和
”myscript.txt“
,则空字符串匹配
!(my)
“myscript.txt”
匹配
*.txt
空字符串是有效匹配

这是通配符的常见问题。要问自己的问题是,有没有办法拆分
myscript.txt
,使第一个片段匹配
!(my)
第二个匹配
*.txt


与直觉相反,答案是肯定的:如果将“
”myscript.txt“
拆分为
(空字符串)和
”myscript.txt“
,则空字符串匹配
!(my)
“myscript.txt”
匹配
*.txt
空字符串是有效匹配

@Cyrus我知道-我的措辞拙劣=>更新了question@Cyrus我知道-我的措辞很糟糕=>更新了问题
$ ls !(my*).txt # All the .txt files that do not begin with my.

hello.txt

$ ls !(my)*.txt # Can you guess why this one matches myscript.txt?

myscript.txt
hello.txt