5 SC2115
Evan McCarter edited this page 2022-05-15 17:33:40 -05:00

Use "${var:?}" to ensure this never expands to /* .

Problematic code:

rm -rf "$STEAMROOT/"*

Correct code:

rm -rf "${STEAMROOT:?}/"*

Rationale:

If STEAMROOT is empty, this will end up deleting everything in the system's root directory.

Using :? will cause the command to fail if the variable is null or unset. Similarly, you can use :- to set a default value if applicable.

In the case command substitution, assign to a variable first and then use :?. This is relevant even if the command seems simple and obviously correct, since forks and execs can fail due to external system limits and conditions, resulting in a blank substitution.

For more details about :? see the "Parameter Expansion" section of the Bash man page.

Exceptions:

None.