Shell globs: Difference between revisions

From Helpful
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{#addbodyclass:tag_tech}}


Globs, is associated with certain kinds of 'match this pattern'.
Globs, is associated with certain kinds of 'match this pattern'.
: also called ''shell globs'', because they are mainly seen in command lines
: also called ''shell globs'', because they are mainly seen in command lines
Compare with [[regular expressions]], which are more powerful (but still single-string) ways of expressing patterns.




...very simple ones, usually only:
Shell globs match fairly simple patterns. you can only use:
: {{inlinecode|?}} meaning ''one'' character of anything, and
: {{inlinecode|?}} meaning ''one'' character of anything, and
: {{inlinecode|*}} meaning ''any'' amount of characters of anything  
: {{inlinecode|*}} meaning ''any'' amount of characters of anything  
:: ...anything except the directory separateor, {{inlinecode|/}} {{(or presumably {{inlinecode|\}} if imitated in windows)}}
:: ...anything except the directory separateor, {{inlinecode|/}} {{(or presumably {{inlinecode|\}} if imitated in windows)}}
 
: {{inlinecode|[chars]}} meaning any one of the characters in this set
 
:: can also be used to match a literal ? or *
see also {{search|fnmatch()}}, which is a "does a single name match this glob"
: {{inlinecode|[!chars]}} meaning anything other than the characters in this set
 
:: I've seen [^chars] manage the same, though this isn't ''quite'' standard [https://pubs.opengroup.org/onlinepubs/007904975/utilities/xcu_chap02.html#tag_02_13_01]
whereas glob() both walks your filesystem and returns ''all'' matching filenames
: apparently fnmatch() is ''used'' in the glob() implementation






Compare with [[regular expressions]], which are more powerful (but still single-string) ways of expressing patterns.
If you have both a fnmatch and glob function:
* {{search|C fnmatch|fnmatch()}} is a "matches a single given string with this pattern"
:: (probably nothing related to the filesystem unless you do it yourself)


That said:
* {{search|C glob|glob()}} is likely to read directory entries from your filesystem and returns ''all'' matching filenames
Some people, when confronted with a problem, think "I know, I'll use regular expressions."
:: apparently fnmatch() is ''used'' in the glob() implementation
Now they have two problems. [https://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/]

Latest revision as of 00:32, 21 April 2024

Globs, is associated with certain kinds of 'match this pattern'.

also called shell globs, because they are mainly seen in command lines

Compare with regular expressions, which are more powerful (but still single-string) ways of expressing patterns.



Shell globs match fairly simple patterns. you can only use:

? meaning one character of anything, and
* meaning any amount of characters of anything
...anything except the directory separateor, / {{(or presumably \ if imitated in windows)}}
[chars] meaning any one of the characters in this set
can also be used to match a literal ? or *
[!chars] meaning anything other than the characters in this set
I've seen [^chars] manage the same, though this isn't quite standard [1]


If you have both a fnmatch and glob function:

  • fnmatch() is a "matches a single given string with this pattern"
(probably nothing related to the filesystem unless you do it yourself)
  • glob() is likely to read directory entries from your filesystem and returns all matching filenames
apparently fnmatch() is used in the glob() implementation