expr - コマンド (プログラム) の説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 演算子 (優先度順)
- オプション
- 例
- 注意
名前
書式
expr
expression...
expr [--help] [--version]
説明
expr
は式を評価し、その結果を標準出力に書き出す。
式のトークン (token) はそれぞれ別々の引数で与える必要がある。
オペランド (operand) は数字または文字列である。
expr
はオペランドの位置に現れたものを、それに対して行われる演算に応じて
整数または文字列に変換する。
文字列は
expr
ではクォートしなくてよいが、
シェルから保護するための引用符が必要かもしれない (スペースなど)。
演算子は 2 項間に挿入されるシンボルとして、
または前置されるキーワードとして与えられる。
括弧も通常のようにグループ化に利用できる
(しかしシェルによる解釈を避けるためには括弧をクォートしなければならない)。
expr
は以下の終了ステータスを返す:
0: 式がナルでも 0 でもない
1: 式がナルまたは 0
2: 式が正しくない
演算子 (優先度順)
関係演算
左項がナルでも 0 でもなければ左項を返す。
ナルや 0 だった場合は右項を返す。
これは通常の `or' 演算にあたる。
左項、右項ともナルでも 0 でもなければ左項を返す。
それ以外の場合は 0 となる。
両項を比較し、関係が真なら 1、偽なら 0 を返す
(==
は =
と同義)。
expr
はまず両方の項を数値に変換し、
数値的な比較を行おうとする。
どちらかの引数が数値に変換できなかった場合は辞書的な比較を行う。
数値演算
代数的な加減算を行う。
左右の項は数値に変換され、失敗した場合はエラーとなる。
代数的な乗算・除算・剰余演算を行う
(`%' は C の場合と同じく剰余演算に対応する)。
左右の項は数値に変換され、これに失敗した場合はエラーとなる。
文字列演算
パターンマッチを実行する。
左右の項は文字列に変換され、
右項は (grep
(1) の使う基本的な) 正規表現として扱われる。
右項には暗黙のうちに先頭に `^' が自動的に付加され、
左項がその正規表現にマッチするかのテストが行われる。
マッチが成功した場合、
正規表現の一部が `\(' と '\)' で囲われていれば、
:
演算子は string
のうち、
副表現 (subexpression) にマッチした部分を返す。
それ以外の場合はマッチした部分の文字数が返される。
マッチに失敗した場合、
`\(' と `\)' が使われていた場合にはナル文字列が、
そうでない場合には 0 が返される。
`\(' と `\)' のペアのうち、最初のものだけが返り値に影響する。
それ以外のペアは、正規表現の演算子をグループ化するという意味だけを持つ。
他の
expr
と異なり、`+' (1 つ以上)、`?' (0 または 1)、`|'
(or 接続) もマッチング演算子として認識される。
-
さらに、以下のキーワードも認識される:
-
-
index
string charset
-
charset
にあるどれかの文字が string
に見付かれば、
その最初に見付かった位置を返す。どの文字も見付からなければ 0 を返す。
-
length
string
-
string
の長さを返す。
-
match
string regex
-
パターンマッチを行う別のやり方。
これは ``string
:
regex
'' と同じ。
-
quote
string
-
string
を (演算子またはキーワードが含まれていても) 通常の文字列とみなす。
環境変数 POSIXLY_CORRECT
が設定されていると無効になる。
-
substr
string position length
-
string
の部分文字列を返す。
部分文字列は string
の position
から始まり、
最大 length
の長さを持つ。
position
や length
が正でなかったり数値でなかった場合は、
ナル文字列を返す。
括弧は通常のグループ化の意味に用いることができる。
キーワード (match, substr, index, length) は文字列として用いることはできない。
オプション
GNU
expr
が引数 1 つだけで起動された場合には、
以下のオプションが認識される:
-
"--help"
-
標準出力に使用方法のメッセージを出力して正常終了する。
-
"--version"
-
標準出力にバージョン情報を出力して正常終了する。
例
シェル変数
foo
に 1 を加える:
foo=expr $a + 1
変数
bar
に格納されているファイル名のうち、
ディレクトリ以外の部分を表示する
(
bar
の値には `/' が含まれていなくても良い):
expr $bar : .*/\(.*\) | $a
文字列 `abc' に文字 `b' をマッチさせる:
expr abc : 'a\(.\)c'
文字列 `abcdef' に `c' または `z' のいずれかが存在している位置を探す:
expr index abcdef cz
キーワード (index) を文字列として用いている誤った例:
expr index index a
キーワード (index) を文字列として用いている正しい例:
expr index quote index d
注意
プログラムのバグについては bug-sh-utils@gnu.org に報告してください。
ページの更新は Ragnar Hojland Espinosa
<ragnar@ragnar-hojland.com> が行っています。
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする