条件文は if を使わずに bash から直接結果を生成します。

条件文は if を使わずに bash から直接結果を生成します。

より多くの行を含むファイルの名前と行数(名前と番号の間にスペースを含む)を出力します。同点の場合、出力は「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; }

関連情報