Linux

條件語句直接導致bash而不使用if

  • September 29, 2018

輸出包含更多行的文件的名稱,以及它還有多少行(名稱和數字之間有一個空格)。如果出現平局,則輸出應為“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 ));

引用自:https://unix.stackexchange.com/questions/472330