Previous: Boolean Ops, Up: Truth Values and Conditions [Contents][Index]

A *conditional expression* is a special kind of expression that has
three operands. It allows you to use one expression’s value to select
one of two other expressions.
The conditional expression is the same as in the C language,
as shown here:

selector?if-true-exp:if-false-exp

There are three subexpressions. The first, `selector`, is always
computed first. If it is “true” (not zero or not null), then
`if-true-exp` is computed next and its value becomes the value of
the whole expression. Otherwise, `if-false-exp` is computed next
and its value becomes the value of the whole expression.
For example, the following expression produces the absolute value of `x`

:

x >= 0 ? x : -x

Each time the conditional expression is computed, only one of
`if-true-exp` and `if-false-exp` is used; the other is ignored.
This is important when the expressions have side effects. For example,
this conditional expression examines element `i`

of either array
`a`

or array `b`

, and increments `i`

:

x == y ? a[i++] : b[i++]

This is guaranteed to increment `i`

exactly once, because each time
only one of the two increment expressions is executed
and the other is not.
See Arrays,
for more information about arrays.

As a minor `gawk`

extension,
a statement that uses ‘`?:`’ can be continued simply
by putting a newline after either character.
However, putting a newline in front
of either character does not work without using backslash continuation
(see Statements/Lines).
If `--posix` is specified
(see Options), then this extension is disabled.

Previous: Boolean Ops, Up: Truth Values and Conditions [Contents][Index]