조건문은 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은 두 파일의 차이점입니다.

답변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; }

관련 정보