[ < ] | [ > ] | [ << ] | [ 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.