[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.4.1 文字列式

expr は、パターンマッチなどの文字列演算子をサポートしている。 文字列演算子の優先順位は、算術演算子や関係演算子よりも高い (算術/関係演算子については後述する)。

string : regex

パターンマッチを行う。まず、左右の項を文字列に変換し、右項を、先頭に ^ が暗黙のうちに付いている正規表現と見なす (grep 風の基本正規表現)。それから、その正規表現と左項がマッチするかどうかを調べる。

マッチが成功した場合、regex 中でカッコ (‘\(’ と ‘\)’) を使用していれば、: 演算子は、そのカッコ内の部分表現にマッチした string 中の部分文字列を返す。カッコを使っていなければ、返すのはマッチした文字数である。

マッチに失敗した場合、: 演算子は、regex 中でカッコ (‘\(’ と ‘\)’) を使用していれば、空文字列を、さもなければ、0 を返す。

最初の ‘\( … \)’ のペアだけが、返り値に関係する。 二番目以降のカッコのペアには、正規表現の演算子をグループ化する働きしかない。

正規表現では、\+, \?, \| は演算子であり、それぞれ、 1 個以上にマッチする、あってもなくてもよい、候補のうちのどちらか、を意味している。 ところが、SunOS などの expr では、こうした記号を通常の文字として扱っている (POSIX は、どちらの動作も認めている)。正規表現の文法については次のものが詳しい。 See (regex)Top section ‘Regular Expression Library’ in Regex. 実例をいくつか、「expr の使用例」に挙げておいた。 expr の使用例.

match string regex

パターンマッチを行う別の方法。これは、‘string : regex’ と同じ である。

substr string position length

string の部分文字列を返す。部分文字列は、position の位置から始まり、最長でも length の長さである。positionlength のどちらかが、負数や 0 だったり、数値以外だったりする場合は、空文字列を返す。

index string charset

charset 中の文字が最初に見つかった string 中の位置を返す。 string 中に charset 中のどの文字も見つからなかった場合は、0 を返す。

length string

string の長さを返す。

+ token

たとえ、tokenmatch のようなキーワードや、 / のような演算子であっても、token を文字列として解釈する。 これを使用すると、expr length + "$x"expr + "$x" : '.*/\(.\)' を実行したとき、$x の値が (たとえば) たまたま /index であっても、適切な動作をさせることができる。 この演算子は、GNU の拡張である。移植を考慮したシェルスクリプトでは、 + "$token" ではなく、" $token" : ' \(.*\)' を使うべきである。

expr にキーワードを文字列として解釈させるためには、クォート演算子 (訳注: 上で述べている + 演算子) を使用しなければならない。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.