Olá boladegude, ainda está interessado na solução?
Seu problema não estava no "$test", mas sim no uso de parênteses "( )". O que estava acontecendo é que vc estava criando um sub-processo do shell pra executar o conteúdo da variável $test, o IF seria executado caso o sub-processo retornasse 0 (sem erro).
Quando vc mudou de "( $test )" para "[ $test = true ]" vc deixou de usar um sub-processo, pra usar um módulo do próprio shell chamado "test", o que faz com que a comparação seja feita pelo próprio processo, o que reduz sobremaneira o peso de processamento.
zekkerj,
Muitíssimo obrigado!!!!!!!!!!
Algumas pessoas devem ter visto isso e não tiveram a boa vontade de ajudar :/
Isso me ajudou muito e acho que ajudou a muitos outros também!
Eu não havia me dado por conta de que os parênteses "()" do "if" eram um subshell, pensei que no "if" os parêteses tinham simplesmente a função de delimitadores de expressão taís como os colchetes "[]".
Dá pra comprovar mesmo que é um subshell assim...
user@cmptl1-1:~$ if (echo 'is it a subshell?') then echo 'yes, it is a subshell!'; fi
is it a subshell?
yes, it is a subshell!
E a melhor solução para corrigir o algoritmo que apresentei no post inicial é utilizar a variável $test sem estar entre (), assim...
user@cmptl1-1:~$ if $test; then echo 'nice!'; fi
nice!
Sua explicação me ajudou bem mais além disso... pois eu tinha outro subshell entre os dois "whiles" para preservar o IFS (que não mostrei aqui por simplicidade).
Removi o tal subshell e guardei o IFS numa variárel (OLDIFS), com isso meu algoritmo ficou 65% mais rápido
Mostro como ficou no post abaixo...Mais uma vez obrigado.
Um abraço,
boladegude.