O caractere [ no seu teste if significa que você disse ao shell para fazer o tipo de avaliação documentada em man test
Pode não corresponder exatamente à página do manual porque [ está embutido na maioria dos shells e ksh , bash , zsh etc pode implementar uma funcionalidade ligeiramente diferente.
No entanto, uma coisa que isso não faz é executar um comando external e testar os resultados.
Então, podemos fazer isso de outra maneira
por exemplo, podemos testar para ver se a saída do comando cmp não está em branco:
if [ -n "$(cmp $IPPATH/ip.old $IPPATH/ip.new)" ]
then
echo different
else
echo same
fi
Ou podemos chamar cmp e testar o código de retorno, que está mais próximo de sua intenção original, sem o [...] wrapping:
if ! cmp $IPPATH/ip.old $IPPATH/ip.new > /dev/null 2>&1
then
echo different
else
echo same
fi