それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bash で三項演算子っぽく処理を書くには

bash でも三項演算子を使いたい

かんたんな、初期値nullチェックとかで三項演算子的なことをよくやります。

bash でもやりたいなと思って調べててみたけど、なかった(あったので追記書きます。)。

条件分岐を使って原始的な手法がsh/bash で使えるのでご紹介。

三項演算子の変わりの原始的手法

[[  $var == abc ]] && echo OK || echo NG

サンプル

#!/bin/bash

## 変数
a=1

echo TRUE になる場合
[[ $a == 1 ]] && echo TRUE || echo FALSE

echo FALSE が実行される場合
[[ $a == 0 ]] && echo TRUE || echo FALSE

三項演算子bash に存在しない

将来のアップデートでbash には搭載されるかもしれないけど、sh には永遠に搭載されないだろし

条件判定を組み合わせて三項演算子っぽく記述できる方法は便利だし採用していきたい。

三項演算子の書き方(追記

三項演算子はsh にはなくbash 独自の機能 (( ))を使えば、書くことが出来ました。

a=1
b=$(( a !=0 ? -1 : 0  ))

ちなみに、(( ))のArithmetic expressions を書くときは、変数に$を付けない。

実際に動かしてみた例はこちら。

takuya@~$ unset a b
takuya@~$ a=1
takuya@~$ b=$(( a !=0 ? -1 : 0  ))
takuya@~$ echo $b
-1
takuya@~$
takuya@~$ unset a b
takuya@~$ a=0
takuya@~$ b=$(( a !=0 ? -1 : 0  ))
takuya@~$ echo $b
0

2019-08-29 訂正

三項演算子ありました。 (( )) を使えば、C言語スタイルの演算ができるので、もしやと思って調べたら・・・

参考資料

https://wiki.bash-hackers.org/syntax/arith_expr