Sim, sua versão padrão não é padrão POSIX, como a pergunta que você vinculou a anotações. No entanto, o seguinte é:
if some-command args; then ...
Eu diria que esta é a única forma portável de if , já que é isso que é if . if faz algo se some-command (que pode ser uma função, um shell embutido ou um executável 1 ) retorna 0 para os argumentos e a entrada em que é executado.
Quando você executa if [ ] ou if [[ ]] , [ ] e [[ ]] são programas ou componentes internos do shell que retornam 0 se a condição for verdadeira. Se você converter [ para test , verá que está sempre executando o formulário sem os colchetes:
if [ ... ]
# same as
if /bin/test ...
1 Para ser mais preciso, vamos ver como o if construct está definido :
The if command shall execute a compound-list and use its exit status to determine whether to execute another compound-list.
The format for the if construct is as follows:
if compound-list then compound-list [elif compound-list then compound-list] ... [else compound-list] fi
Note que uma lista composta não é a o mesmo que um comando composto .