Test 組込みコマンドは引数で指定した内容の判定を行います。
test 判定式
[ 判定式 ]
Test コマンドは引数で与えられた判定式を評価し、結果が真ならば 0 の終了ステータスを、偽ならば 1 の終了ステータスで終了します。
Test コマンドはオプションとオペランドとを区別しません。コマンドライン引数は全て判定式として解釈します。
判定式は何種類かの演算子とそれに対する被演算子とからなります。
ファイルに関する判定を行う単項演算子は以下の通りです。指定したファイルがシンボリックリンクの場合、そのシンボリックリンクが指している先のファイルについて判定を行います (-h
, -L
演算子を除く)。
-b ファイル名
-c ファイル名
-d ファイル名
-e ファイル名
-f ファイル名
-g ファイル名
-h ファイル名
-L ファイル名
-k ファイル名
-p ファイル名
-r ファイル名
-S ファイル名
-s ファイル名
-u ファイル名
-w ファイル名
-x ファイル名
ファイル記述子に関する判定を行う単項演算子は以下の通りです。
-t ファイル記述子
文字列に関する判定を行う単項演算子は以下の通りです。
-n 文字列
-z 文字列
ファイルに関する判定を行う二項演算子は以下の通りです。
ファイル名1 -nt ファイル名2
ファイル名1 -ot ファイル名2
ファイル名1 -ef ファイル名2
文字列に関する判定を行う二項演算子は以下の通りです。
文字列1 = 文字列2
文字列1 != 文字列2
整数に関する判定を行う二項演算子は以下の通りです。
整数1 -eq 整数2
整数1 -ne 整数2
整数1 -gt 整数2
整数1 -ge 整数2
整数1 -lt 整数2
整数1 -le 整数2
他の判定式を組み合わせてより複雑な判定式を作る演算子は以下の通りです。
! 判定式
( 判定式 )
判定式1 -a 判定式2
判定式1 -o 判定式2
判定式が空の場合、結果は偽とみなします。判定式が (演算子の付いていない) 文字列一つの場合、その文字列が空文字列でないかどうかを判定します。
Test コマンドの終了ステータスは、判定式の評価結果が真ならば 0、偽ならば 1 です。判定式の構文に誤りがある場合その他のエラーが発生したときは、終了ステータスは 2 です。
複雑な判定式は誤って解釈されることがあるので避けることをお勧めします。例えば [ 1 -eq 1 -a -t = 1 -a ! foo ]
は [ 1 -eq 1 ] && [ -t = 1 ] && ! [ foo ]
のようにコマンドを分けると式がより明確になります。
POSIX は、エラーが発生した場合の終了ステータスを2 以上
と定めています。また POSIX には以下の演算子の規定はありません: -nt
, -ot
, -ef
。