Não é tanto que não seja portátil, mas que não há [implementação em que seja confiável quando passados mais de 4 argumentos.
Mesmo no bash:
$ ALTNAMES='=' bash -c '[ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ]'
bash: line 0: [: too many arguments
A seção relacionada declara:
> 4 argumentos :
Os resultados não são especificados.
[OB XSI] [Opção Iniciar] Em sistemas em conformidade com XSI, as combinações de primárias e operadores devem ser avaliadas usando as regras de precedência e associatividade descritas anteriormente. Além disso, as primárias binárias da comparação de cadeias '=' e "! =" Devem ter uma precedência mais alta do que qualquer primário primário unário. [Fim da opção]
-ae -odeve ser banido. O caminho certo é usar os operadores &&e || shell :
if [ -n "$foo" ] && [ -n "$bar" ]; then
Eu até acho isso mais legível.