GNU Core Utilities/expr
expr
コマンドは、簡単な計算や文字列操作を行うためのコマンドです。数値演算や文字列の長さ、文字列の検索など、シェルスクリプト内で使われることが多いユーティリティです。シンプルながらも、数値計算、文字列操作、論理演算など多くの機能を提供します。
基本的な使い方
編集expr <式>
expr
コマンドは、数式や文字列を評価し、その結果を表示します。
主なオプション(GNU coreutils版)
編集expr
コマンドにはオプションはありませんが、使用される式によって異なる動作をします。数値の計算や文字列の操作を指定することができます。
例
編集数値の計算
編集expr 5 + 3
5 + 3
の計算結果として 8
が表示されます。
数値の掛け算(注意:演算子の前後にスペースが必要)
編集expr 5 \* 3
5 * 3
の計算結果として 15
が表示されます。掛け算の演算子は \*
とエスケープする必要があります。
数値の割り算
編集expr 10 / 2
10 / 2
の計算結果として 5
が表示されます。
文字列の長さ
編集expr length "Hello"
文字列 "Hello"
の長さを求める結果として 5
が表示されます。
文字列の結合
編集expr "Hello" : "H.*"
文字列 "Hello"
から最初に一致した部分文字列を抽出し、H
が表示されます。
文字列の置換(正規表現を使用)
編集expr "Hello World" : '\(.*\) World'
"Hello World"
の文字列の中から "World"
を除いた部分(Hello
)が表示されます。
使用例(シェルスクリプト内での活用)
編集if文で数値比較
編集result=$(expr 10 \> 5) if [ $result -eq 1 ]; then echo "10 is greater than 5" fi
10
が 5
より大きいため、"10 is greater than 5"
が表示されます。
モダンなシェルでは expr の必要性は限定的
編集モダンなシェル(Bash、Zsh、Kshなど)では、expr
コマンドの多くの機能が組み込み機能(ビルトイン)や算術展開によって提供されています。
Bashでの代替機能
編集- 算術演算
# exprの代わりに $((...)) を使用 result=$((5 + 3)) # 加算 result=$((10 * 2)) # 乗算 result=$((20 / 4)) # 除算 result=$((17 % 5)) # 剰余
- 文字列比較
# 文字列長の取得 length=${#string} # 文字列の比較 if [[ "$string1" == "$string2" ]]; then echo "等しい" fi
- 正規表現マッチング
# =~演算子を使用 if [[ "$string" =~ pattern ]]; then echo "マッチ" fi
expr
コマンドの歴史的背景
編集
- UNIXの初期のシェルスクリプティングでは、算術演算が制限されていた
expr
は、これらの制限を補完するために開発された- POSIXスクリプトとの互換性のため、今でも残されている
現代のシェルでの推奨事項
編集- 算術演算:
$((...))
またはlet
- 文字列操作: パラメータ展開
- 条件テスト:
[[
]]
expr
は現在では主に:
- 非常に古いスクリプト
- POSIXに厳密に準拠する必要があるスクリプト
- 高度に移植性を必要とする環境
で使用されます。
モダンなシェルスクリプティングでは、expr
コマンドよりもネイティブの機能を使用することが推奨されています。
FreeBSD 版との違い
編集FreeBSD でも expr
コマンドは提供されていますが、GNU coreutils 版と同様に基本的な数値計算や文字列操作を行うことができます。動作に大きな違いはありません。
例(FreeBSD)
編集expr 5 + 3
5 + 3
の計算結果として 8
が表示されます。
詳細情報
編集詳しくは、それぞれの環境で man expr
を確認してください。