4 SC3043
ILoveGoulash edited this page 2024-11-22 10:51:58 +01:00

In POSIX sh, local is undefined.

Problematic code:

myfunc() {
  local i=0
  ..
}

Correct code:

In POSIX sh, you can adopt some convention to avoid accidentally overwriting variables names, e.g. prefixing with the function name:

myfunc() {
  _myfunc_i=0
  ..
}

Rationale:

local is supported in many shells, including bash, ksh, dash, and BusyBox ash. However, strictly speaking, it's not POSIX (rationale).

Exceptions:

Since quite a lot of real world shells support this feature, you may decide to ignore the warning.

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