シェルスクリプト

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

More than 1 year has passed since last update.

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コマンドの[を使用したほうがいい


参考