re-bonjour tout le monde!

J'ai un truc bizarre qui se passe avec un while.
J'ai le code suivant :

#!/bin/bash
stty erase ^H

sH=1,9
sB=1,6

while ((test $ans != Q)&&(test $ans != q)); do
clear
echo -e "Which parameter do you want to change?\n\n"
echo -e "\t[1]\tsH (current value is $sH)"
echo -e "\t[2]\tsB (current value is $sB)"
echo -e "\t[Q]\tQuit menu and run script"

read ans

case "$ans" in

1) echo -n "sH = "
read sH;;

2) echo -n "sB = "
read sB;;
esac
done


echo "sH: $sH"
echo "sB: $sB"

exit 0;



quand je l'execute, ça me met le message suivant :

line 7: test: !=: unary operator expected

Est-ce que ça vient du fait que le "et" logique ne s'ecrit pas comme ça?
J'ai trouvé un moyen de contourner le problème avec la ligne

while !((test $ans = Q)||(test $ans = q)); do


Et là ça marche sans problème. Le truc c'est que j'aimerai bien comprendre pourquoi avec le & ça marche pas.
Si qqn peut m'eclairer, ça serait sympa.

Voiloute