LoginSignup
30

More than 5 years have passed since last update.

bash で boolean を使った if 文 (条件分岐)

Last updated at Posted at 2018-08-10

シェルスクリプトを書いているときに boolean を使って条件分岐させたいときにはまった罠について残しておきます。

まとめ

  • if [ 条件式 ]; = if test 条件式; と同じ
  • test truetest false も true になる
  • boolen を使った条件式は if "${boolean}"; を使おう

boolean 値は if [ "${boolean}" ]; で判定できない

下記のようなコードを書いて条件分岐をさせようとしていました。


#!/bin/bash

readonly is_true=true
readonly is_false=false

if [ "${is_true}" ]; then
    echo 'is_true'
fi
if [ "${is_false}" ]; then
    echo 'is_false'
fi

出力結果

$ sh boolean_test.sh
is_true
is_false

どちらも出力されてしまってます。

if [ 条件式 ]; は if test 条件式; と同様

There exists a dedicated command called [ (left bracket special character). It is a synonym for test, and a builtin for efficiency reasons.

と書かれているように
if [ 条件式 ];if test 条件式; は同義です。
そして test truetest false も両方trueになります

$ test true
$ echo $?
0
$ test false
$ echo $?
0

なので両方出力されてたんですね

解決策 if "${boolean}"; を使おう

#!/bin/bash

readonly is_true=true
readonly is_false=false

if "${is_true}"; then
    echo 'is_true'
fi
if "${is_false}"; then
    echo 'is_false'
fi

出力結果

$ sh boolean_test.sh
is_true

参考資料

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30