Here shows the behavious of empty conditional expressions: ------------------------------------------------------------------------ infinite:~# [[ ]] -bash: syntax error near unexpected token `]]' infinite:~# [[ ]] infinite:~# [[ "$A" ]] -bash: syntax error near unexpected token `"$A"' infinite:~# [[ "$A" ]] infinite:~# [[ "$A" ]] infinite:~# [[ ]] infinite:~# [[ "$A" ]] -bash: syntax error near unexpected token `"$A"' infinite:~# echo $? 2 infinite:~# [[ "$A" ]] infinite:~# echo $? 1 infinite:~# infinite:~# bash --version bash --version GNU bash, version 5.2.15(1)-release (x86_64-pc-linux-gnu) ------------------------------------------------------------------------
The variable $A has never been defined. Double brackets surrounding 1) a few spaces or 2) an empty variable even quoted behave illogically. I've also try different lengths of spaces, and also an empty variable without quotes, the same illogical. I am curious if I am the first guy encounter such a situation. My observation: 1) An empty conditional expression will first triger an syntax error, return with code 2; 2) Immediate another empty conditional expression won't triger such an error, return with code 1; 3) Subsequent a conditional expression with empty variables will triger the error again; 4) The same conditional expression won't triger the error until different commands are input; I guess it has something to do with the cache of command evaluation. It seems there is a counter recording some state. I hope my guess may help in debugging. According to the manual, I think an empty condition like ``[[ ]]'' and ``[[ $EMPTY ]]'' should always triger syntax error, but a condition with an empty string like ``[[ "" ]]'' and ``[[ "$EMPTY" ]]'' should evaluate to false or return 1.