SC2115

Adam edited this page Oct 5, 2017 · 3 revisions

ShellCheck

Clone this wiki locally

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.