Or "[ ! -a file ] is always true because -a
becomes logical AND. Use -e instead."
if [ ! -o braceexpand ]
then
..
fiif [[ ! -o braceexpand ]]
then
..
fior
if ! [ -o braceexpand ]
then
..
fiBash interprets [ ! -o opt ] as
[ "!" ] || [ "opt" ] instead of negating the condition. As
a result, the condition is always true.
Avoid this by using [[ ! -o opt ]] or
! [ -o opt ].
The same issue applies to [ ! -a file ], but this is
easier fixed using POSIX standard [ ! -e file ].
None.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.