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>