Pattern: Masking return value in shell script
Issue: -
In the original code, the return value of somecmd
is ignored, and export
will instead always return true. This may prevent conditionals, set -e
and traps from working correctly.
When first marked for export and assigned separately, the return value of the assignment will be that of somecmd
. This avoids the problem.
Example of incorrect code:
export foo="$(somecmd)"
Example of correct code:
foo=$(somecmd)
export foo
If you intend to ignore the return value of an assignment, you can either ignore this warning or use
foo=$(somecmd) || true
export foo
Shellcheck does not warn about export foo=bar
because bar
is a literal and not a command substitution with an independent return value. It also does not warn about local -r foo=$(cmd)
, where declaration and assignment must be in the same command.