var=name
n=42
echo "$var_$n.jpg" # overextendedor
target="world"
echo "hello $tagret" # misspelledor
echo "Result: ${mycmd -a myfile}" # trying to execute commandsvar=name
n=42
echo "${var}_${n}.jpg"or
target="world"
echo "hello $target"or
echo "Result: $(mycmd -a myfile)"ShellCheck has noticed that you reference a variable that is not assigned. Double check that the variable is indeed assigned, and that the name is not misspelled.
Note: This message only triggers for variables with lowercase
characters in their name (foo and kFOO but not
FOO) due to the standard convention of using lowercase
variable names for unexported, local variables.
ShellCheck intentionally does not attempt to figure out runtime or
dynamic assignments like with source "$(date +%F).sh" or
eval var=value. See SC2034 for an
extended discussion of why this is the case.
If you know for a fact that the variable is set, you can use
${var:?} to fail if the variable is unset (or empty),
initialize it to a default value if uninitialized with
: "${var:=}", or explicitly initialize/declare it with
var="" or declare var. You can also disable
the message with a directive.
POSIX - Parameter expansion:
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.