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

105 より大きいため、"10 is greater than 5" が表示されます。

モダンなシェルでは expr の必要性は限定的

編集

モダンなシェル(BashZshKshなど)では、exprコマンドの多くの機能が組み込み機能(ビルトイン)や算術展開によって提供されています。

Bashでの代替機能

編集
  1. 算術演算
    # exprの代わりに $((...)) を使用
    result=$((5 + 3))  # 加算
    result=$((10 * 2)) # 乗算
    result=$((20 / 4)) # 除算
    result=$((17 % 5)) # 剰余
    
  2. 文字列比較
    # 文字列長の取得
    length=${#string}
    
    # 文字列の比較
    if [[ "$string1" == "$string2" ]]; then
        echo "等しい"
    fi
    
  3. 正規表現マッチング
    # =~演算子を使用
    if [[ "$string" =~ pattern ]]; then
        echo "マッチ"
    fi
    

exprコマンドの歴史的背景

編集
  • UNIXの初期のシェルスクリプティングでは、算術演算が制限されていた
  • exprは、これらの制限を補完するために開発された
  • POSIXスクリプトとの互換性のため、今でも残されている

現代のシェルでの推奨事項

編集
  1. 算術演算: $((...)) または let
  2. 文字列操作: パラメータ展開
  3. 条件テスト: [[ ]]

exprは現在では主に:

  • 非常に古いスクリプト
  • POSIXに厳密に準拠する必要があるスクリプト
  • 高度に移植性を必要とする環境

で使用されます。

モダンなシェルスクリプティングでは、exprコマンドよりもネイティブの機能を使用することが推奨されています。

FreeBSD 版との違い

編集

FreeBSD でも expr コマンドは提供されていますが、GNU coreutils 版と同様に基本的な数値計算や文字列操作を行うことができます。動作に大きな違いはありません。

例(FreeBSD)

編集
expr 5 + 3

5 + 3 の計算結果として 8 が表示されます。

詳細情報

編集

詳しくは、それぞれの環境で man expr を確認してください。