Skip to content

Latest commit

 

History

History
45 lines (29 loc) · 1.12 KB

SC2229.md

File metadata and controls

45 lines (29 loc) · 1.12 KB

Pattern: Use of read $var

Issue: -

Description

read takes a variable name, but shellcheck has noticed that you give it an expanded variable instead. This will populate whatever the variable expands to instead of the variable itself. For example:

foo=bar
read $foo   # Reads data into 'bar', not into 'foo'
read foo    # Reads data into 'foo'

Example of incorrect code:

read $foo

Example of correct code:

read foo

Exceptions

If this is intentional and you do want to read a variable through an indirect reference, you can silence this warning with a directive:

# shellcheck disable=SC2229
read "$foo"

Or take advantage of the fact that ShellCheck only warns when no parameter expansion modifiers are applied:

read "${foo}"    # ShellCheck warns
read "${foo?}"   # No warning

${foo?} fails when foo is unset, which is fine since read would have failed too. The main side effect is an improved runtime error message in that case.

Further Reading