Bashシェルスクリプトで数値配列の合計値を算出する

Bash,CentOS,Linux,Ubuntu

はじめに

Bashシェルスクリプトでは type または declare コマンドを利用することで配列変数を宣言できます。

この「配列変数」の合計値を算出する簡単な方法は無いか考えたことを公開します。

検証環境

$ uname -moi
x86_64 x86_64 GNU/Linux

$ bash -version | head -n 1
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)

すぐに思いつくループする方法

declare -a NUMS=(
  1 2 3 4 5
)

SUM=0
for N in ${NUMS[@]}; do
   ((SUM+=N))
done

echo $SUM

実行結果は 15 となります。

変数参照時に一工夫する方法

変数参照時に一工夫して合計値の算出を行う方法もあります。

declare -a NUMS=(
  1 2 3 4 5
)

# 配列の各要素の後ろに "+" を付与する
echo "${NUMS[*]/%/+}"

# 先の出力結果の後方に "0" を付与する
echo "${NUMS[*]/%/+}0"

# 先の出力結果を数式として処理する
echo $((${NUMS[@]/%/+}0))

実行結果はループする方法同様 15 となります。

出力内容が3つありますが、最終的に必要なのは以下の1コマンドのみです。

echo $((${NUMS[@]/%/+}0))

ひとこと

ワンライナーで実現できますが、可読性は高くないのが難点です。

Bash,CentOS,Linux,Ubuntu