Altamente improvável. if
não é um comando ; faz parte da sintaxe do shell sh , com diferentes regras de análise para permitir listas de comandos, aninhados if
, e assim por diante.
Por exemplo, seria praticamente impossível o seguinte se if
fosse um comando, pois o analisador só pararia em if test -e file;
sem considerar o resto.
if test -e file; then
echo "File exists"
else
if touch file; then
echo "File created"
else
echo "File couldn't be created"
fi
fi
Ou isto:
if case $path in
~/trash/*) false;;
~/*) true;;
/proc/*) false;;
*) true;;
esac; then
backup "$path"
else
echo "skipping $path"
fi
A menos que você queira recorrer a coisas como citar ... muitas citações. E seria necessário reimplementar o mesmo analisador de shell if
. Se você simplesmente criasse um novo imaginarysh -c <argument>
, seria impossível modificar as variáveis dentro das listas de comandos.
/bin/if "test -e file" "echo \"File exists\"" "if \"touch file\" \"echo File created\" \"echo \\"File couldn\\'t be created\\"\""
(Além disso: if
é na verdade um comando na linguagem de programação Tcl , e funciona exatamente como no exemplo acima, exceto com {
}
balanceado para citar blocos de código.)
Mas pensando duas vezes, se if
fosse um comando, seria impossível modificar as variáveis dentro das listas de comandos de qualquer maneira . Qualquer coisa modificada dentro dos argumentos if
seria impossível alcançar o processo principal.
Finalmente, não há absolutamente nenhuma vantagem para implementar if
externamente. Nos shells, testar a condição consiste em 1) executar o comando e 2) verificar seu código de saída. Se if
fosse externo, seu shell teria que fazer o mesmo assim , caso contrário, não saberia se if
foi bem-sucedido ou falhou. (A mesma funcionalidade é usada também em ||
e &&
condicionais).
(além: nos primeiros protótipos do Unix, chdir
era um comando externo .)