あなたは一行でそれを行うことができます:
ls /home/edward/bank1/fiche/Test* >/dev/null 2>&1 && echo "found one" || echo "found none"
それが何であるかを理解するには、コマンドを分解し、ブール論理の基本的な認識を持っている必要があります。
bashのmanページから直接:
[...]
expression1 && expression2
True if both expression1 and expression2 are true.
expression1 || expression2
True if either expression1 or expression2 is true.
[...]
シェル(および一般的にUNIXの世界)では、ブール値trueは、ステータス0で終了するプログラムです。
ls
パターンをリストしようとします。成功した場合(パターンが存在することを意味します)、それ以外の場合はステータス0、2で終了します(詳細については、lsのマニュアルページを参照してください)。
私たちの場合、実際には3つの式があります。わかりやすくするために、括弧を付けます。ただし、これらは&&
優先されるため、必要ありません||
。
(expression1 && expression2) || expression3
したがって、expression1がtrueの場合(つまりls
、パターンが見つかった場合)、expression2を評価します(これは単なるエコーであり、ステータス0で終了します)。この場合、の左側のサイトにあるもの||
はすでに真であり、右側にあるものを評価しようとするとリソースの浪費になるため、expression3は評価されません。
それ以外の場合、expression1がfalseの場合、expression2は評価されませんが、この場合、expression3は評価されます。