Cyker Way <cyker...@gmail.com> added the comment:

Thank you for confirmation. Knowing it is not fully POSIX-compliant helps with 
understanding.

I'm asking this because I had interoperability issues writing python scripts 
providing shell-like utilities for filename expansion and the result may 
surprise users. The glibc fnmatch provides a flag named `FNM_PATHNAME`, which 
is missing in the python fnmatch implementation. So I think there is currently 
no way to tell the python library if we are matching a filename or not.

All right so this is not a bug, but probably a good enhancement.

## TLDR

This is what POSIX says **for filename expansion**, in section 2.13.3:

<http://pubs.opengroup.org/onlinepubs/9699919799.2008edition/>

>   when pattern matching notation is used for filename expansion:
>
>   1.  The <slash> character in a pathname shall be explicitly matched by 
> using one or more <slash> characters in the pattern; it shall neither be 
> matched by the <asterisk> or <question-mark> special characters nor by a 
> bracket expression. <slash> characters in the pattern shall be identified 
> before bracket expressions; thus, a <slash> cannot be included in a pattern 
> bracket expression used for filename expansion. If a <slash> character is 
> found following an unescaped <left-square-bracket> character before a 
> corresponding <right-square-bracket> is found, the open bracket shall be 
> treated as an ordinary character. For example, the pattern "a[b/c]d" does not 
> match such pathnames as abd or a/d. It only matches a pathname of literally 
> a[b/c]d.

Currently python fnmatch.fnmatch gives:

    >>> fnmatch('abd', 'a[b/c]d')
    True
    >>> fnmatch('a/d', 'a[b/c]d')
    True
    >>> fnmatch('a[b/c]d', 'a[b/c]d')
    False

Ideally we can call `fnmatch('a/d', 'a[b/c]d', fnm_pathname=True)` to correct 
the behavior.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue35314>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to