LoginSignup
1

More than 5 years have passed since last update.

シェルスクリプトの条件式の評価 [[]] とtestコマンド []

Posted at

bashにおけるtestコマンド[]と条件式の評価[[]]の違いが分かりにくかったので、備忘録としてまとめました。

testコマンド []

  • if文やwhile文での条件判断に使用される
  • 文字列の比較、数値の比較、ファイルの存在や属性のチェックといった条件判断に使用される
  • シェルの組込みコマンドとして実装されている

使い方

  • testでも[でも起動できる
    • [で起動した場合は最後の引数を]にする
  • 各引数はスペースで区切る
  • 文字列の比較は==ではなく=
  • 演算子の< >( )を使用するには\を頭に付ける

条件式の評価 [[]]

  • 条件式を評価し、その結果によって終了ステータスを返す
  • testコマンドの[]と似ているが、いくつか異なる部分がある
  • シェルの文法上で直接条件式を解釈する

testコマンドとの違い

項目 testコマンド [[]]
AND条件 条件式1 -a 条件式2 条件式1 && 条件式2
OR条件 条件式1 -o 条件式2 条件式1 \
ワード分割 変数展開後にワード分割される ワード分割されない
パス名展開 される されない
文字列の比較演算子 == の動作 文字列1 == 文字列2 文字列 == パターン (パターンマッチとなり、*, ?, [a-Z]などのパターンで文字列の判定を行える)

どちらを使用すべきか

どちらを使用すべきかは状況によりそうです。
個人的には以下のように判断していますが、使い分けの基準がございましたら教えてください。

  • [[がある bash, ksh, zsh だけならば、testコマンドの[はハマりどころが多いため、[[を使用したほうが安全
  • 移植性を考慮するなら、testコマンドの[を使用したほうがいい

参考

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
What you can do with signing up
1