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 in `awk`

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 section Arrays in `awk`

,
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 section `awk`

Statements Versus Lines).
If `--posix`

is specified
(see section Command-Line Options), this extension is disabled.

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