Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.syntblaze.com/llms.txt

Use this file to discover all available pages before exploring further.

The ?: operator in Bash is a ternary conditional operator evaluated exclusively within arithmetic expansion contexts ($((...)), ((...)), or let). It evaluates a mathematical or logical expression and returns one of two specified integer values based on whether the condition resolves to non-zero (true) or zero (false).

Arithmetic Ternary Operator

Syntax:
condition ? expression_if_true : expression_if_false
Evaluation Mechanics:
  1. Context Requirement: The operator is syntactically invalid in standard shell command execution; it must be enclosed in an arithmetic evaluation block.
  2. Condition Resolution: The condition is evaluated as an integer. In Bash arithmetic, any non-zero value represents logical true, while 0 represents logical false.
  3. Short-Circuit Evaluation: The operator exhibits short-circuiting behavior. If condition is non-zero, only expression_if_true is evaluated. If condition is zero, only expression_if_false is evaluated. Side effects (such as variable assignments) in the unselected branch will not occur.
  4. Return Value: The integer result of the evaluated expression becomes the return value of the entire ternary operation.
Syntax Visualization:

# Assignment via arithmetic expansion
result=$(( condition ? expr1 : expr2 ))


# Standalone arithmetic evaluation
(( var = condition ? expr1 : expr2 ))

Disambiguation: Parameter Expansion (:?)

While ?: is the arithmetic ternary operator, Bash also features a structurally similar parameter expansion operator, :? (colon-question mark), used for variable state validation rather than arithmetic logic. Syntax:
${parameter:?word}
Evaluation Mechanics:
  1. State Check: The shell evaluates whether parameter is unset or null (an empty string).
  2. Execution Flow:
    • If parameter is set and not null, the expansion yields the value of parameter.
    • If parameter is unset or null, the expansion evaluates word and writes the resulting string to standard error (stderr). If word is omitted, a default system error message is printed.
  3. Termination: If the :? expansion triggers the error condition within a non-interactive shell (such as a script), the shell immediately aborts execution and exits with a non-zero status.
Master Bash with Deep Grasping Methodology!Learn More