---
name: "strmatch"
section: "3"
platform: "macos"
package: "ksh"
version: "42"
release: "macOS 26.5"
platforms: ["macos"]
url: "https://new.carta.tech/strmatch"
---

# strmatch(3)

match shell file patterns

## NAME

strmatch - match shell file patterns

## SYNOPSIS

$1$2int strmatch(char\* s, char\* p)int strmatch(char\* s, char\* p)int strmatch(char\* s, char\* p)int strmatch(char\* s, char\* p)int strmatch(char\* s, char\* p)int strmatch(char\* s, char\* p)int strmatch(char\* s, char\* p)int strmatch(char\* s, char\* p)\
 $1$2char\* submatch(char\* s, char\* p, int m)char\* submatch(char\* s, char\* p, int m)char\* submatch(char\* s, char\* p, int m)char\* submatch(char\* s, char\* p, int m)char\* submatch(char\* s, char\* p, int m)char\* submatch(char\* s, char\* p, int m)char\* submatch(char\* s, char\* p, int m)char\* submatch(char\* s, char\* p, int m)

## DESCRIPTION

*strmatch* compares the string *s* with the shell pattern *p* and returns 1 for match and 0 otherwise. *submatch* does a leading substring match of the shell pattern *p* with the string *s*. If *m* is 0 then the match is minimal, otherwise a maximal match is done. A pointer to the first character after the matched substring is returned, *0* if there is no match.

Except for *&* and *!*, each shell pattern has an equivalent  [*egrep*(1)](/egrep/1.md) construct.

```
	sh pattern	egrep RE	description
	*		.*		0 or more chars
	?		.		any single char
	[.]		[.]		char class
	[!.]		[^.]		negated char class
	*(.)		(.)*		0 or more of
	+(.)		(.)+		1 or more of
	?(.)		(.)?		0 or 1 of
	(.)		(.)		1 of
	@(.)		(.)		1 of
	a|b		a|b		a or b
	a&b				a and b
	!(.)				none of
```

$1$2\\\\\\\\\\\\\\\\ is used to escape \*, ?, (, \|, &, ), \[, and \\ outside of \[...\].

## SEE ALSO

[grep(1)](/grep/1.md)

## BUGS

An unbalanced $1$2)))))))) terminates the top level pattern.\
 Nested $1$2&&&&&&&& and $1$2!!!!!!!! constructs are non-intuitive and are computationally intensive.
