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

参考

1
1
0

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
1
1