SC3028 – ShellCheck Wiki

See this page on GitHub

Sitemap


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.


ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.