Paramètre pas bien passé

J’ai créé une fonction de cryptage des mots de passe. Mais le premier paramètre n’est pas bien transmis. crypt_pass "a" produit le même résultat que crypt_pass "b" . Qu’est-ce que je fais mal?

 crypt_pass() { echo $(perl -e'print crypt($1, "aa")') } 

Cordialement, Kevin

L’incorporation du paramètre dans un script perl peut entraîner des problèmes s’il existe des caractères spéciaux à perl dans la valeur du paramètre. Mieux vaut faire quelque chose comme

 crypt_pass() { echo $(perl -e 'print crypt($ARGV[0], "aa")' "$1") } 

Sans l’avoir testée, je suppose que ce serait à l’intérieur ' guillemets, aucune substitution de variable n’est effectuée et le $1 est passé littéralement.

Vous devez inclure le code Perl entre guillemets, de cette façon bash peut remplacer son $1 avant que la chaîne ne soit transmise à l’interpréteur Perl.

 crypt_pass() { echo $(perl -e"print crypt($1, \"aa\")") } 

Comme en Perl, vous pouvez utiliser des guillemets simples pour une chaîne, vous pouvez éviter les échappements en utilisant simplement des guillemets simples.

 crypt_pass() { echo $(perl -e"print crypt($1, 'aa')") }