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
}