より多くの行を含むファイルの名前と行数(名前と番号の間にスペースを含む)を出力します。同点の場合、出力は「foobar 0」でなければなりません。たとえば、fooには「foo 1」という1行があり、barには「bar 3」という3行があり、同じ#行があります。「foobar 0」。 IF文はありません。
これがうまくいかない理由:[[ $r -gt 0 ]] && { echo foo $r; } || [[ $r -lt 0 ]] && { echo bar $r; } || { echo foobar $r; }
$ rは2つのファイルの違いです。
答え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; }