if 표현식jq의 조건 표현식은 if A then B else C end예요.
if-then-else는 모든 jq 내장 함수처럼 필터예요. 입력을 받아 출력을 만들어요.
표현식 A가 "참 같은" 값을 만들면 if 필터는 B를 평가해요.
그렇지 않으면 C를 평가해요.
if 필터의 입력은 B나 C로 전달돼요.
42 | if . < 50 then "small" else "big" end # => "small"
5 | if . % 2 == 0 then . / 2 else . * 4 end # => 20
else 절은 생략할 수 있어요. 다음 두 문은 서로 같아요.
if A then B else . end
if A then B end
if문elif로 조건을 더 추가할 수 있어요.
42 | if . < 33 then "small"
elif . < 66 then "medium"
else "big"
end
# => "medium"
elif 절은 필요한 만큼 사용하면 돼요.
jq에서 "거짓"인 값은 false와 null뿐이에요.
나머지는 모두 "참"이에요. 숫자 0, 빈 문자열, 빈 배열, 빈 객체도 마찬가지예요.
불리언 연산자 and와 or를 사용하면 복잡한 쿼리를 만들 수 있어요.
42 | if . < 33 or . > 66 then "big or small"
else "medium"
end
부정하려면 not을 사용해요. not은 연산자가 아니라 필터예요.
42 | if (. < 33 or . > 66 | not) then "medium"
else "big or small"
end
대체 연산자를 사용하면 표현식이 false나 null일 때 쓸 "기본값"을 지정할 수 있어요.
A // B
# This is identical to
if A then A else B end
예시를 볼까요.
[3, 5, 18] | add / 2 # => 13
[] | add / 2 # => error: null (null) and number (2) cannot be divided
[] | add // 0 / 2 # => 0
다른 언어에서 넘어온 프로그래머라면 cond, case, switch, when, unless, 삼항 연산자 등 더 다양한 조건문을 기대할지도 몰라요.
위에 나온 연산자가 jq가 제공하는 전부예요.