2024-03-15 diff is no diff?
$ 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.
まとめると、挙動はこの表のようになり、
diffが |
diff status code |
if true(then) or false(else) |
---|---|---|
ある |
1 |
false |
ない |
0 |
true |
diff
command はその解釈としては、
「diffがあること」を判定するコマンドではなく、
「diffがないこと」を判定することになっているのでは?
という。。