| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
expr は、パターンマッチなどの文字列演算子をサポートしている。
文字列演算子の優先順位は、算術演算子や関係演算子よりも高い
(算術/関係演算子については後述する)。
パターンマッチを行う。まず、左右の項を文字列に変換し、右項を、先頭に
^ が暗黙のうちに付いている正規表現と見なす (grep
風の基本正規表現)。それから、その正規表現と左項がマッチするかどうかを調べる。
マッチが成功した場合、regex 中でカッコ (‘\(’ と ‘\)’)
を使用していれば、: 演算子は、そのカッコ内の部分表現にマッチした
string 中の部分文字列を返す。カッコを使っていなければ、返すのはマッチした文字数である。
マッチに失敗した場合、: 演算子は、regex 中でカッコ (‘\(’ と ‘\)’)
を使用していれば、空文字列を、さもなければ、0 を返す。
最初の ‘\( … \)’ のペアだけが、返り値に関係する。 二番目以降のカッコのペアには、正規表現の演算子をグループ化する働きしかない。
正規表現では、\+, \?, \| は演算子であり、それぞれ、
1 個以上にマッチする、あってもなくてもよい、候補のうちのどちらか、を意味している。
ところが、SunOS などの expr では、こうした記号を通常の文字として扱っている
(POSIX は、どちらの動作も認めている)。正規表現の文法については次のものが詳しい。
See (regex)Top section ‘Regular Expression Library’ in Regex.
実例をいくつか、「expr の使用例」に挙げておいた。
expr の使用例.
パターンマッチを行う別の方法。これは、‘string : regex’ と同じ である。
string の部分文字列を返す。部分文字列は、position の位置から始まり、最長でも length の長さである。position と length のどちらかが、負数や 0 だったり、数値以外だったりする場合は、空文字列を返す。
charset 中の文字が最初に見つかった string 中の位置を返す。 string 中に charset 中のどの文字も見つからなかった場合は、0 を返す。
string の長さを返す。
たとえ、token が match のようなキーワードや、 /
のような演算子であっても、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.