if [ rpm -q ... &> /dev/null ] é o uso inválido do [ incorporado.
Você veria isso na mensagem de erro se você não redirecionasse o stderr, assim:
if [ rpm -q $1 >/dev/null ]; then
Todo comando executado tem um código de saída, portanto, não há necessidade de agrupar em [ ... ] e sua sintaxe é inválida.
Escreva assim:
isInstalled() {
if rpm -q $1 &> /dev/null; then
echo 'installed';
return 1;
else
echo 'not installed';
return 0;
fi
}