Skip to content
Lawrence Velázquez edited this page May 21, 2023 · 3 revisions

In POSIX sh, VARIABLE is undefined.

(or "In dash, ... is not supported." when using dash)

Problematic code:

#!/bin/sh
echo "$HOSTNAME $UID $RANDOM"

Correct code:

Either switch to a shell like bash that supports the special variable you're trying to use, or use an external command to get the information you want:

#!/bin/sh
echo "$(hostname) $(id -u) $(awk 'BEGIN { srand(); print int(rand()*32768) }' /dev/null)"

Rationale:

The variable you are attempting to use is a special variable in bash or ksh. To get the same information from dash or POSIX sh, use an external command instead.

For PIPESTATUS, the pipeline can be instrumented to record the exit value of each command:

{ cmd0; echo $? > status0; } | { cmd1; echo $? > status1; } | cmd2

Exceptions:

If you only intend to target shells that support this feature, you can change the shebang to a shell that guarantees support, or ignore this warning.

You can use # shellcheck disable=SC3000-SC4000 to ignore all such compatibility warnings.

Related resources:

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!

ShellCheck

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.

Clone this wiki locally