less than 1 minute read

$ echo 1 > 1
$ echo 2 > 2
$ diff 1 1 && echo it is true 
it is true
$ diff 1 2 && echo it is false
1c1
< 1
---
> 2

などと供述しておりました。

持った疑問としては、 diff command の挙動は

Exit status is 0 if inputs are the same, 1 if different, 2 if trouble.

(from https://man7.org/linux/man-pages/man1/diff.1.html)

であり、shell script における if-else では、以下のようにstatus codeによって分岐するので、

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

The if list is executed. If its exit status is zero, the then list is executed. Otherwise, each elif list is executed in turn, and if its exit status is zero, the corresponding then list is executed and the command completes. Otherwise, the else list is executed, if present.

(from https://linux.die.net/man/1/bash#:~:text=if list%3B then list%3B [ elif list%3B then list%3B ] ... [ else list%3B ] fi)

まとめると、挙動はこの表のようになり、

diffが

diff status code

if true(then) or false(else)

ある

1

false

ない

0

true

diff command はその解釈としては、
「diffがあること」を判定するコマンドではなく、
「diffがないこと」を判定することになっているのでは?
という。。

Updated: