このページの内容

2.13 演算子で基本要素を組み合わせる

演算子は、テストとアクションから複雑な式を組み立てます。優先順位の高いものから順に、次の演算子があります。

( expr )

優先順位を強制します。exprが真であれば真になります。

! expr
-not expr

exprが偽であれば真になります。一部のシェルでは、「!」をシェルに解釈させないため、引用符で囲む必要があります。「-not」はPOSIXに存在しないため、同等で移植性の高い「!」を選べます。

expr1 expr2
expr1 -a expr2
expr1 -and expr2

論理積です。expr1が偽の場合、expr2は評価しません。「-and」はPOSIXに存在しないため、同等で移植性の高い「-a」を選べます。

expr1 -o expr2
expr1 -or expr2

論理和です。expr1が真の場合、expr2は評価しません。「-or」はPOSIXに存在しないため、同等で移植性の高い「-o」を選べます。

expr1 , expr2

一覧です。expr1とexpr2を常に両方評価し、expr2が真であれば真になります。expr1の値は捨てます。この演算子を使うと、ほかの操作の成功に依存せず、1回の走査で複数の独立した操作を行えます。ただし、expr1とexpr2という2つの操作が、常に完全に独立しているわけではありません。expr1には、ファイルに触れる、削除するなどの副作用があり得ますし、「-prune」を使ってexpr2にも影響する可能性があるためです。

「-a」は、明示的に指定した場合でも、2つのテストの間に演算子を書かないなど暗黙的に指定した場合でも、「-o」より優先順位が高いことに注意してください。そのため、「find afile bfile -name afile -o -name bfile -print」が「afile」を表示することはありません。

findは、各ファイル名を根とするディレクトリツリーを検索します。優先順位に従って式を左から右へ評価し、結果が確定するまで続けます。「-and」では左辺が偽、「-or」では左辺が真になった時点で、findは次のファイル名へ進みます。

複雑な式では、さらに次の2つのテストが役立つ場合があります。

テスト: -true

常に真です。

テスト: -false

常に偽です。