输出包含更多行的文件的名称,以及还有多少行(名称和数字之间有一个空格)。如果存在平局,则输出应为“foobar 0”。例如: foo 还有 1 行:“foo 1”; bar 还有 3 行:“bar 3”,相同的 # 行:“foobar 0”。没有 IF 语句。
为什么这不起作用:[[ $r -gt 0 ]] && { echo foo $r; } || [[ $r -lt 0 ]] && { echo bar $r; } || { echo foobar $r; }
$r 是两个文件之间的差异
答案1
请注意,您的案例是不相交的,因此您实际上并不需要||
.
[[ $r -gt 0 ]] && echo foo $r; # positive
[[ $r -lt 0 ]] && echo bar $r; # negative
[[ $r -eq 0 ]] && echo foobar $r; # zero
为什么这不起作用
&&
并且||
从左到右评估,它们之间的优先级没有区别,这使得if .. then .. else
它们很难进行样式逻辑。您需要使用大括号或括号手动添加分组。 (或者只是使用该if
声明,它的存在是有原因的。)
例如,这总是打印nonnegative
,无论是否negative
打印:
[ $x -ge 0 ]] || echo negative && echo nonnegative
如果您希望差值为正值,则需要在中间分支中将其取反,例如:
[[ $r -lt 0 ]] && echo bar $(( -r ));
答案2
使用圆括号,其工作原理如下:([[ $r -gt 0 ]] && { echo foo $r; }) || ([[ $r -lt 0 ]] && { echo bar $r; }) || { echo foobar $r; }