SC2331 – ShellCheck Wiki

See this page on GitHub

Sitemap


For file existence, prefer standard -e over legacy -a.

Problematic code:

if [ -a ~/.bash_aliases ]
then
  source ~/.bash_aliases
fi

Correct code:

if [ -e ~/.bash_aliases ]
then
  source ~/.bash_aliases
fi

Rationale:

The POSIX standard way to check whether a file exists is [ -e file ].

Bash and Ksh have historically allowed using -a, but this has no benefit and some potential downsides. For example, in Bash [ -a file ] is true when the file exists, but [ ! -a file ] is also true, and unconditionally so, because -a is treated as logical "and" between non-empty strings.

Avoid the ambiguity entirely by always using the standard, portable -e.

Exceptions:

None


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