Anything that produces a meaningful exit status, such as keywords, built-ins, and external executables can be a conditional. Most commonly combined with control flow elements, these conditionals are also useful for setting the exit status of functions and sub-shells.
However, another class of conditionals exists. When expanding variable names, an optional syntax allows the expansion itself to conditionally produce different results based on the variable contents and expansion operator used.
Copy link