exprコマンドは式を評価し、その結果を標準出力に出力します。
評価する式は様々で、文字列、数値、論理を評価することができます。
目次
文字列の評価
正規表現
実行した結果はマッチした文字数になります。
正規表現は、
1 |
expr <string> : <regex> |
またはmatchという文字列を最初に記述した
1 |
expr match <string> <regex> |
になります。
コマンド例
1 |
expr abcde : "a.*e" |
または
1 |
expr match abcde "a.*e" |
実行結果
1 |
5 |
正規表現のグループ化
実行結果は、最初にグループ化でマッチした文字列になります。
グループ化は「\( \)」を用います。
コマンド例
1 |
expr abcde : "a\(.*\)e" |
または
1 |
expr match abcde "a\(.*\)e" |
実行結果
1 |
bcd |
部分文字列
実行した結果は文字列になります。
部分文字列はsubstrを用いて以下のように使用します。
1 |
expr substr <string> <position> <length> |
positionやlengthは数値を取り、その数値が0や負の数の場合はnull文字になります。
コマンド例
1 |
expr substr abcde 1 1 |
実行結果
1 |
a |
コマンド例
1 |
expr substr abcde 99 3 |
実行結果
null文字
コマンド例
1 |
expr substr abcde 2 99 |
実行結果
1 |
bcde |
文字の位置
実行結果は文字の位置を表す数字になります。
構文はindexを用いて以下のように使用します。
1 |
expr index <string> <charset> |
特定の文字が見つかった場合は最初に発見した位置を表示します。
文字が見つからない場合は0が表示されます。
コマンド例
1 |
expr index abcde eab |
実行結果
1 |
1 |
文字列の長さ
実行結果は文字列の長さを表す数字になります。
lengthを用いて以下のように使用できます。
1 |
expr length <string> |
コマンド例
1 |
expr length abcde |
実行結果
1 |
5 |
注意事項
変数の文字列がmatchやlengthのキーワードなどの場合は、構文エラーを起こす可能性があります。その場合、+演算子や正規表現のグループ化を使用する方法を取る必要があります。
例えば、
1 2 |
$ expr length length expr: syntax error: missing argument after ‘length’ |
はエラーの例になります。これを対処するには+演算子や正規表現のグループ化で取り出した文字列を利用します。
1 2 3 4 |
$ expr length + length 6 $ expr length '(' " length" : ' \(.*\)' ')' 6 |
整数の計算
exprコマンドは整数の計算を行うことができます。
計算は加算、減算、乗算、除算、剰余演算ができ、
演算子は「+」、「-」、「*」、「/」、「%」の5つの演算子を用いることができます。
コマンド例
1 |
expr 1 + 2 |
実行結果
1 |
3 |
コマンド例
1 |
expr 13 % 10 |
実行結果
1 |
3 |
論理演算子や関係演算子
ORやAND
exprコマンドはORとして「|」、ANDとして「&」を用いることができます。ただし、シェルの文字として扱われないように演算子を引用符を用いて文字列を囲む必要があります。
「|」演算子は、
- 最初の引数がnullもしくは0でなければ、最初の引数を返す。
- 2つ目の引数がnullもしくは0でなければ、2つ目の引数を返す。
- その他(両方がnullや0以外)なら、0を返す。
で演算します。
コマンド例
1 |
expr 'b' "|" 'a' |
実行結果
1 |
b |
「&」演算子は、
- 2つの引数がnullもしくは0でなければ、最初の引数を返す。
- その他(どちらかがnullや0)なら、0を返す。
で演算します。
コマンド例
1 |
expr 'a' "&" 'a' |
実行結果
1 |
a |
関係
関係として、「<」、「<=」、「==」、「!=」、「=>」、「>」の演算子を用いることができます。演算子をシェルの演算として解釈されないように引用符で囲む必要があります。
関係が正しければtrueとして1を、正しくなければfalseとして0を返します。
コマンド例
1 |
expr 1 '<' 2 |
実行結果
1 |
1 |