expr コマンド
目的
引数を式として評価します。
構文
式 式
説明
expr コマンドは、Expression パラメーターを読み取り、それを評価して、結果を標準出力に書き出します。
Expression パラメーターに対しては、次の規則が適用されます。
- 各項はブランクで区切ります。
- シェルの特殊文字の前に ¥ (円記号) を付けます。
- ブランクまたはその他の特殊文字を含むストリングを引用符で囲みます。
整数の前には、単項のハイフンを付けることができます。 内部では、整数は 32 ビットの 2 の補数として処理されます。
注: 式 コマンドは、ヌル・ストリングではなくゼロ値を示す 0 を戻します。
次の項目は、Expression パラメーターの演算子およびキーワードを記述しています。 エスケープする必要のある文字の前には、¥ (円記号) が付いています。 項目のリストは、優先順位が高い順に並んでおり、同じ優先順位の演算子は {} (中括弧) で囲んでグループ化されています。
項目 | 説明 |
---|---|
Expression1 \| Expression2 | null でも 0 でもない場合は、Expression1 を戻します。それ以外の場合は、Expression2 を戻します。 |
Expression1 \& Expression2 | Expression1 と Expression2 の値が null でも 0 でもない場合は、Expression1 を戻します。それ以外の場合には値 0 を戻します。 |
Expression1 { =, \>, \>=, \<, \<=, != } Expression2 | 両方の式が整数の場合、整数の比較結果を戻します。その他の場合は、文字列の比較結果を戻します。 |
Expression1 {+, - } Expression2 | 整数値の引数を加算または減算します。 |
Expression1 { \*, /, % } Expression2 | 乗算、除算を行うか、または整数値の引数の除算の剰余を算出します。 |
Expression1 : Expression2 | Expression1 の計算結果を Expression2 の計算結果から得られた正規表現パターンと比較します。 正規表現の構文は ed コマンドの場合と同じですが、すべてのパターンは文字列の先頭に置かれていなければなりません (つまり、文字列の先頭文字から始まるシーケンスのみが、正規表現によってマッチングされます)。 したがって、^ (脱字記号) は、このコンテキストでは特殊文字ではありません。 一般に、照合演算子は、一致した文字の数を戻します (突き合わせが失敗すると 0)。 パターンに次のサブ式
が含まれている場合は、実際に一致した文字が入っている文字列が戻されます。 照合シーケンスでは、文字範囲で使用する等価クラスを定義できます。 照合シーケンスおよび等価クラスについて詳しくは、「 グローバリゼーション・ガイドおよび解説書 」の「 ロケール環境変数について 」を参照してください。 |
注: 以下のストリング引数は、標準の拡張機能であり、オペレーティング・システムによって動作が異なる場合があります。 これらの引数の文字列は移植可能ではありません。
項目 | 説明 |
---|---|
一致 String1 String2 | Expression1 : Expression2 と同じです。 |
長さ String1 | String1 の長さを戻します。 |
指標 String1 String2 | String2 内のいずれかの文字が存在する String1 内の最初の桁を戻します。 |
substr String1 StartPosition 長さ | String1 内の StartPosition の桁にある文字で始まり、Length の文字数まで続く文字列を戻します。 |
終了状況
このコマンドは、以下の終了値を戻します。
項目 | 説明 |
---|---|
0 | Expression パラメーターは、null でも 0 でもありません。 |
1 | Expression パラメーターは、null か 0 です。 |
※2 | Expression パラメーターは無効です。 |
>2 | エラーが発生しました。 |
注: シェルによるパラメーター処理の後、 式 コマンドは、値以外の演算子とオペランドを区別できません。 したがって、以下の値が$a次と同一であるj、コマンド:
expr $a = j
は、シェルがこの引数を expr コマンドを渡した後、
expr j = j
シェルが引数を 式 コマンドに渡した後。 また、次のコマンドも真になります。
expr X$a = Xj
例
- シェル変数を変更するには、次のように入力します。
これにより、1シェル変数への$COUNT 式 コマンドは、抑音符号で囲まれます。これにより、シェルは 式 コマンドからの標準出力を置換して、COUNT=コマンド。 この$COUNT使用前に変数を初期化する必要があります。COUNT=`expr $COUNT + 1`
- ¥ STR シェル変数の長さを調べるには、次のように入力します。
これにより、LENGTH変数を: (コロン) 演算子で指定された値に変更します。 パターン .* (ドット、アスタリスク) は、先頭から末尾までの任意のストリングと一致するため、コロン演算子は、$STR文字数として表示されます。 Note that.*シェルが * (アスタリスク) をパターン・マッチング文字として扱わないように、引用符で囲む必要があります。 引用符はパターンの一部ではありません。LENGTH=`expr $STR : ".*"`
:NONE.$STR変数がヌル・ストリングに設定されているか、空白文字 (ブランクまたはタブ) を含んでいる場合、コマンドはエラー・メッセージを表示します。expr: syntax errorこれは、シェルが通常はヌル・ストリングをコマンドに渡さないために起こります。 この場合、expr コマンドでは、次の内容しか認識できません。
シェルは単一引用符も除去します。 コロン演算子は 2 つの値を必要とするので、これは機能しません。 この問題は、シェル変数を次のように二重引用符で囲めば解決できます。:.*
ここで、以下の値が$STR変数がヌルです。LENGTH変数は値 0 に設定されます。 シェル変数を二重引用符で囲むことをお勧めします。 シェル変数を単一引用符で囲まないように注意してください。LENGTH=`expr "$STR" : ".*"`
- ストリングの一部を使用するには、次のように入力します。
これにより、先頭のハイフン (ある場合) が削除されます。$FLAGシェル変数。 コロン演算子は, 1 次区画の一部をFLAG変数は、¥ (および ¥) 文字 (円記号、左括弧と円記号、右括弧) で囲まれた副次式と一致します。 ¥( と ¥) のサブ式の文字を省略すると、コロン演算子は一致した文字の数を与えます。FLAG=`expr "$FLAG" : "-*\(.*\)"`
:NONE.$FLAG変数が-(ハイフン) に設定されている場合、コマンドは構文エラー・メッセージを表示します。 これは、シェルが以下の値を置換するために起こります。$FLAG変数を指定してから、 式 コマンドを実行します。 expr コマンドはハイフンが変数の値であることを認識しません。 expr コマンドには次のようにしか見えません。
そして、最初のハイフンを減算の演算子と解釈します。 この問題を解決するには、次のように入力します。- : -*\(.*\)
FLAG=`expr "x$FLAG" : "x-*\(.*\)"`
- 条件 ステートメントで 式 コマンドを使用するには、次のように入力します。
:NONE.$ANSWER変数が次で始まるyまたはY、then条件 ステートメントの一部が実行されます。 マッチングが正常に行われると、 式の結果は 1 になり、expr コマンドは 終了値 0 を戻します。if ステートメントはこれを論理値が真であると認識します。 マッチ・ファイルが失敗すると、結果は 0 となり、終了値 1 (偽) が戻されます。if expr "$ANSWER" : "[yY]" >/dev/null then echo ANSWER begins with "y" or "Y" fi
expr コマンドの標準出力を /dev/null スペシャル・ファイルにリダイレクトすると、式の結果は破棄されます。 リダイレクトしなければ、結果は標準出力に書き出されます。通常、標準出力はワークステーションのディスプレイです。
- 次の式を考えてみます。
:NONE.$STR変数の値=(等号) を使用すると、シェルがこのコマンドを処理した後、 式 コマンドは次の式を参照します。expr "$STR" = "="
expr コマンドは、これを行内の 3 つの = 演算子と解釈して、構文エラー・メッセージを表示します。 シェル変数の値が expr 演算子の 1 つと同じであると、このメッセージが必ず表示されます。 この問題は、次のように式を記述すれば解決できます。= = =
expr "x$STR" = "x="
- $SHELL 環境変数の長さを戻すには、 /usr/bin/ksh, 次のように入力します。
次のように表示されます。expr length $SHELL
12
- 「abcdef」でストリング「de」の文字が検出された場所の最初の位置を戻すには、次のように入力します。
次のように表示されます。expr index abcdef de
4
- ストリング「fd」内の任意の文字が「abcdef」内で検出された最初の位置を戻すには、次のように入力します。
次のように表示されます。expr index abcdef fd
4
- 「グッドナイト・レディース」というストリングの長さが 6 の場合に、11 桁目から始まるストリングを戻すには、次のように入力します。
次のように表示されます。expr substr "Goodnight Ladies" 11 6
Ladies
ファイル
項目 | 説明 |
---|---|
/usr/bin/expr | expr コマンドが入っています。 |