result is true. But I don't understand why since bash will translate $anything to an empty string, shouldn't this will result in syntax error ?
Fechar, mas sem biscoito. Existe uma expressão: $anything . if ; then é um erro porque o bash falha em analisar o erro (portanto: sintaxe ). Ele espera uma lista de comandos e recebe um ; . A análise acontece bem antes que a expansão de variável aconteça, portanto, if $anything; then analisa bem. O que acontece depois? $anything é expandido e divisão de campo etc. Isso deixa uma lista de comandos vazia, o que é trivialmente verdade. Comparar:
if "$anything"; then echo foo; fi
if $anything; then echo foo; fi
"$anything"; não é uma lista de comandos vazia, tem o comando que acontece com uma string vazia, o mesmo que com if ''; . Mas um "$anything" não expandido se expande para nada.
O mesmo aconteceria se $anything contivesse apenas caracteres de espaço em branco presentes em IFS ou contivesse uma lista de globs% de$IFS separados que não correspondiam a nenhum arquivo e a opção nullglob estivesse ativada. / p>