In POSIX sh, declare
is undefined.
Problematic code:
#!/bin/sh
declare var="value"
or
#!/bin/sh
declare -r readonly
or
#!/bin/sh
declare ...
Correct code:
If assigning a simple variable outside of a function, skip declare
all together:
var="value"
If declaring a variable read-only:
var=value
readonly var
If you are unable to find a suitable replacement, consider switching to a shell that supports declare
:
#!/bin/bash
declare ...
Indexed arrays, associative arrays, local variables, namerefs, and integer variables are not supported in POSIX sh. Either write around them, or switch to a shell that supports them.
Rationale:
The declare
command is non-standard, and most of its functionality is not available across shells.
Either find a POSIX replacement, or switch to a shell that is guaranteed to support them.
Exceptions:
If your declare
command is guarded by a check of the shell version, such as inspecting $BASH_VERSION
, you can ignore this message.
Related resources:
- Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!
-
Installation
-
Usage
-
Integrating and extending
Each individual ShellCheck warning has its own wiki page like SC1000. Use GitHub Wiki's "Pages" feature above to find a specific one, or see Checks.