Linux
條件語句直接導致bash而不使用if
輸出包含更多行的文件的名稱,以及它還有多少行(名稱和數字之間有一個空格)。如果出現平局,則輸出應為“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 是兩個文件之間的區別
使用圓括號,它的工作方式如下所述:
([[ $r -gt 0 ]] && { echo foo $r; }) || ([[ $r -lt 0 ]] && { echo bar $r; }) || { echo foobar $r; }
請注意,您的案例是不相交的,因此您實際上並不需要
||
.[[ $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 ));