expr supports pattern matching and other string operators. These
have higher precedence than both the numeric and relational operators (in
the next sections).
string : regex’
Perform pattern matching. The arguments are converted to strings and the
second is considered to be a (basic, a la GNU
expression, with a
^ implicitly prepended. The first argument is
then matched against this regular expression.
If the match succeeds and
regex uses ‘
\(’ and ‘
: expression returns the part of
string that matched the
subexpression; otherwise, it returns the number of characters matched.
If the match fails, the
: operator returns the null string if
\(’ and ‘
\)’ are used in
regex, otherwise 0.
Only the first ‘
\( … \)’ pair is relevant to the return
value; additional pairs are meaningful only for grouping the regular
In the regular expression,
operators which respectively match one or more, zero or one, or separate
alternatives. SunOS and other
expr’s treat these as regular
characters. (POSIX allows either behavior.)
See Regular Expression Library in Regex, for details of
regular expression syntax. Some examples are in Examples of expr.
match string regex’
An alternative way to do pattern matching. This is the same as
string : regex’.
substr string position length’
Returns the substring of
string beginning at
with length at most
length. If either
length is negative, zero, or non-numeric, returns the null string.
index string charset’
Returns the first position in
string where the first character in
charset was found. If no character in
charset is found in
string, return 0.
Returns the length of
token as a string, even if it is a keyword like
or an operator like
This makes it possible to test
expr length + "$x" or
expr + "$x" : '.*/\(.\)' and have it do the right thing even if
the value of
$x happens to be (for example)
This operator is a GNU extension. Portable shell scripts should use
" $token" : ' \(.*\)' instead of
expr interpret keywords as strings, you must use the