Skip to content
Vidar Holen edited this page Sep 8, 2020 · 9 revisions

In POSIX sh, ^ in place of ! in glob bracket expressions is undefined.

Problematic code:

echo foo-[^0]*.jpg

Correct code:

echo foo-[!0]*.jpg

Rationale:

[^c] is frequently used in most regular expression variants to mean "any character except c". This is so pervasive that bash, ksh, dash, and BusyBox ash, all allow it.

However, strictly speaking, the only range complement syntax guaranteed to be supported across shells is [!c].

Exceptions:

If you only intend to target shells that supports this feature, you can change the shebang to a shell that guarantees support, or ignore this warning. Or just rewrite it to be on the technically correct side.

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