J'aime utiliser la déclaration de cas pour comparer des chaînes.
Un exemple trivial est
case "$input"
in
"$variable1") echo "matched the first value"
;;
"$variable2") echo "matched the second value"
;;
*[a-z]*) echo "input has letters"
;;
'') echo "input is null!"
;;
*[0-9]*) echo "matched numbers (but I don't have letters, otherwise the letter test would have been hit first!)"
;;
*) echo "Some wacky stuff in the input!"
esac
J'ai fait des choses folles comme
case "$(cat file)"
in
"$(cat other_file)") echo "file and other_file are the same"
;;
*) echo "file and other_file are different"
esac
Et cela fonctionne aussi, avec certaines limites, telles que les fichiers ne peuvent pas être plus d'un couple mégaoctets et le shell ne voit tout simplement pas de valeurs nulles, donc si un fichier est plein de zéros et l'autre n'en a pas, (et aucun n'a d'autre chose), ce test ne verra aucune différence entre les deux. Je n'utilise pas la comparaison de fichiers comme un exemple sérieux, seulement un exemple de la façon dont l'instruction case est capable de faire une correspondance de chaîne beaucoup plus flexible que celle disponible avec test ou expr ou d'autres expressions shell similaires.
'$ {var1: 0: 4}' - d'où avez-vous obtenu cette syntaxe? Ce n'est certainement pas POSIX. –
Ma version de cut dit que les positions sont numérotées à partir de 1. '' cut -c 1-4'' ou '' cut -c -4'' renvoie la valeur correcte ici. – jotr