連載
» 2018年01月05日 05時00分 公開

Linux基本コマンドTips(172):【 let 】コマンド――算術式を評価する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、算術式を評価する「let」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、算術式を評価する「let」コマンドです。

letコマンドとは?

 「let」は、四則演算や論理演算を含む算術式を評価するシェルのビルトインコマンドです。主にシェルスクリプト内で使用します。

 四則演算では負の数を含む整数だけを利用できます。小数を使うときはbcコマンド(連載第121回)を利用してください。



letコマンドの書式

let 変数=算術式

※[ ]は省略可能な引数を示しています。




letの主なオプション

 letコマンドにはオプションはありません。

letコマンドで使用できる演算子(四則演算)

演算子 意味
+ 加算
- 減算
変数++、変数-- 変数を評価した後でインクリメント(1増やす)、同じくデクリメント(1減らす)
++変数、--変数 変数をインクリメントしてから評価する、変数をデクリメントしてから評価する
* 乗算
** 累乗
/ 除算(整数のみ)
% 剰余(割り算の余り)

letコマンドで使用できる演算子(ビット演算)

演算子 意味
~ ビット単位の否定
<< 左ビットシフト
>> 右ビットシフト
& ビット単位のAND
^ ビット単位のXOR
| ビット単位のOR

letコマンドで使用できる演算子(比較)

演算子 意味
<=, >=, <, > 大小の比較(TRUEは1、FALSEは0)
==, != 等しい、等しくない(TRUEは1、FALSEは0)

letコマンドで使用できる演算子(論理演算)

演算子 意味
! 論理否定
&& 論理的AND
|| 論理的OR
式1 ? 式2 : 式3 三項演算(式1がTRUEならば式2、式1がFALSEなら式3を評価する)

※ この他、次のような代入演算子を使用できる。=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=、|=。四則演算では「let a=(4+5)*7」のようにかっこを使って、演算の優先順位を指定できる。





変数を使って計算する

 「let 変数=算術式」のように、式の結果を変数にセットします。exprコマンド(第171回)とは違い、式に空白は含めません。

 同じ実行内容を「((変数=算術式))」のように書くこともできます。シェルスクリプトの中では、このような書き方の方が一般的でしょう。

 コマンドラインで算術式の結果を確認したい場合は、「echo $変数」で表示します。

 式の結果をすぐに表示するのであれば、「echo $((算術式))」のように書く方法もあります(画面1)。「$((算術式))」という書き方を「算術式展開(arithmetic expansion)」と呼びます。

 letはbashのビルトインコマンドで、算術式の評価はbashが行っています。算術式の中ではパス名を展開しないため、「*」記号をエスケープする必要はありません ※1。さらに算術式の中で変数を使う際、「$」記号は不要です。

※1 letコマンド同様、式を評価するexprコマンドでは「*」などを使う際、エスケープが必要だ。



コマンド実行例

let x=100+20画面1

(100と20を足した結果を変数xにセット、結果は「echo $x」で確認)

((x=100+20))

(let x=100+20と同じ処理を実行する)

echo $((100+20))

(100と20を足した結果を表示、算術式展開を利用)

a=100 b=20 let c=a+b

(変数aとbの値を足して変数cにセット)

echo $((a+b))

(変数aとbの値を足した結果を表示、算術式展開を利用)

echo $((a*b))

(変数aとbの値を掛けた結果を表示、算術式展開を利用)


画面1 画面1 算術式展開を利用したところ


インクリメントとデクリメントを使う

 「a++」または「++a」でaの値を1増やします。これを「インクリメント」と呼びます。同様に「--」で1減らすことを「デクリメント」と呼びます。

 コマンドラインではあまり使用しませんが、シェルスクリプトの中ではよく使われる処理です。

 「a++」と「++a」は、処理の順番に違いがあります。

 letコマンドでインクリメントしてから「echo $a」で内容を表示する、という場合は「a++」でも「++a」でも結果は変わりません。しかし、計算と参照を同時に指定する算術式展開の場合、「echo $((++a))」ならばインクリメントしてから表示、「echo $((a++))」の場合は表示してからインクリメントとなります(画面2)。

画面2 画面2 インクリメントとデクリメントの計算順序を確認したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2018 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。