Skip to content
Joachim Ansorg edited this page Nov 12, 2021 · 2 revisions

In [..] you have to escape \( \) or preferably combine [..] expressions.

Problematic code:

[ -e ~/.bashrc -a ( -x /bin/dash -o -x /bin/ash ) ]

Correct code:

In POSIX:

[ -e ~/.bashrc ] &&  { [ -x /bin/dash ] || [ -x /bin/ash ]; }

Obsolete XSI syntax:

[ -e ~/.bashrc -a \( -x /bin/dash -o -x /bin/ash \) ]

Rationale:

[ is implemented as a regular command, so ( is not special.

The preferred way is not to group inside [ .. ] and instead compose multiple [ .. ] statments using the shell's &&, || and { ..; } syntax, since this is well defined by POSIX.

Some shells, such as Bash, support grouping with \( .. \), but this is an obsolete XSI-only extension.

Exceptions:

None

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