bashにおけるtestコマンド[]
と条件式の評価[[]]
の違いが分かりにくかったので、備忘録としてまとめました。
testコマンド []
- if文やwhile文での条件判断に使用される
- 文字列の比較、数値の比較、ファイルの存在や属性のチェックといった条件判断に使用される
- シェルの組込みコマンドとして実装されている
使い方
-
test
でも[
でも起動できる-
[
で起動した場合は最後の引数を]
にする
-
- 各引数はスペースで区切る
- 文字列の比較は
==
ではなく=
- 演算子の
< >
や( )
を使用するには\
を頭に付ける
条件式の評価 [[]]
- 条件式を評価し、その結果によって終了ステータスを返す
- testコマンドの
[]
と似ているが、いくつか異なる部分がある - シェルの文法上で直接条件式を解釈する
testコマンドとの違い
項目 | testコマンド | [[]] |
---|---|---|
AND条件 |
条件式1 -a 条件式2
|
条件式1 && 条件式2
|
OR条件 |
条件式1 -o 条件式2
|
条件式1 || 条件式2
|
ワード分割 | 変数展開後にワード分割される | ワード分割されない |
パス名展開 | される | されない |
文字列の比較演算子 == の動作 |
文字列1 == 文字列2
|
文字列 == パターン (パターンマッチとなり、*, ?, [a-Z]などのパターンで文字列の判定を行える) |
どちらを使用すべきか
どちらを使用すべきかは状況によりそうです。
個人的には以下のように判断していますが、使い分けの基準がございましたら教えてください。
-
[[
がある bash, ksh, zsh だけならば、testコマンドの[
はハマりどころが多いため、[[
を使用したほうが安全 - 移植性を考慮するなら、testコマンドの
[
を使用したほうがいい