Bashで簡単な計算(+−×÷)をする一番良い方法はこれ

シェル

コマンドライン(Bash)で簡単な整数の計算を行うには、「$((算術式))」を使います。

$ echo $((1 + 1))	# 足し算
2
$ echo $((2 - 1))	# 引き算
1
$ echo $((10 * 10))	# かけ算
100
$ echo $((6 / 2))	# 割り算(割り切れない場合は小数以下が消える)
3
$ echo $((7 % 3))	# 剰余
1
$ echo $((10 ** 10))	# 階乗
10000000000

$((算術式))」は「算術式展開」と呼ばれ、Bashが算術式を解釈→計算する→計算結果に置き換えてコマンドを実行する、という動作をします。なので、実行するコマンドを問わず用いることができます。たとえば、実用的な例ではありませんが、以下のように実行することもできます。

$ ls test$((1 + 1)).sh
test2.sh

この時、Bashは「$((1 + 1))」を計算し、「2」に置き換えて実行します。なので、「ls test2.sh」と実行していることと同じ、というわけです。

以下のシェルスクリプトのように、「$((算術式))」の中で変数を使うこともできます。

#!/bin/bash
DIV_NUM=7
i=0
for i in $(seq 0 10000) # 「$(コマンド)」はコマンドの出力と置き換えられる(コマンド置換)
do
  if [[ $((i % DIV_NUM)) -eq 0 ]]; then
    echo $i を $DIV_NUM で割るとちょうど $((i / DIV_NUM)) になります。
  fi
  ((i++))  # 頭に「$」を付けない場合は計算結果が展開されない
done

$((算術式))」の中では、上の例のように変数の頭の「$」を省略できます(書いても構いません)。また、例の中にある「((i++))」のように、頭に「$」をつけずに「((算術式))」と記述することもできます(算術式評価)。この場合、算術式は実行されますが、結果は展開されません。上の例だと、変数iをインクリメント(プラス1)します。

なお「$[算術式]」と記述することもできます。しかし、これは古い書き方で、将来的に使えなくなる可能性もあります。なので、「$((算術式))」を用いるようにしたほうが良いでしょう。

コマンドラインで計算を行う方法として、「expr 算術式」が紹介されることもあります。しかし、「$((算術式))」を用いたほうが高速です。とくに、上の例のようにループで何度も計算を行う場合、大きな差が出てきます。そのため、通常は「$((算術式))」使ったほうが良いでしょう。

ただし、「$((算術式))」だと小数を含む計算はできません。より複雑な「bc」コマンドを使ってください。以下の記事で解説しています。

コマンドラインで少数の計算や比較をする方法
整数の計算なら、「echo $((数式))」でできますよね。 $ echo $((1 + 1)) # 足し算 2 $ echo $((2 - 1)) # 引き算 1 $ echo $((10 * 10)) # かけ算 100 $ echo...
シェル
\シェアお願いします/
LFI

コメント

  1. 通りすがり より:

    誤: 少数
    正: 小数

    ですよ。

タイトルとURLをコピーしました