더 많은 줄을 포함하는 파일의 이름과 줄 수(이름과 번호 사이에 공백 포함)를 출력합니다. 동점인 경우 출력은 "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은 두 파일의 차이점입니다.
답변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; }