【发布时间】:2011-08-05 10:23:53
【问题描述】:
我创建了一个用于加密密码的函数。但是第一个参数没有很好地传递。 crypt_pass "a" 输出与crypt_pass "b" 相同。我做错了什么?
crypt_pass() {
echo $(perl -e'print crypt($1, "aa")')
}
问候, 凯文
【问题讨论】:
我创建了一个用于加密密码的函数。但是第一个参数没有很好地传递。 crypt_pass "a" 输出与crypt_pass "b" 相同。我做错了什么?
crypt_pass() {
echo $(perl -e'print crypt($1, "aa")')
}
问候, 凯文
【问题讨论】:
没有测试过,我的猜测是在' 引号内,没有执行变量替换,$1 是按字面意思传递的。
【讨论】:
$1 被解释为 Perl 变量,而不是 Bash 变量。
crypt('.$1.'),但没用.. :(
您应该将 Perl 代码用双引号括起来,这样 bash 可以在将字符串传递给 Perl 解释器之前替换它的 $1。
crypt_pass() {
echo $(perl -e"print crypt($1, \"aa\")")
}
由于在 Perl 中您可以对字符串使用单引号,因此您可以通过使用单引号来避免转义,这样会变得更简洁:
crypt_pass() {
echo $(perl -e"print crypt($1, 'aa')")
}
【讨论】:
如果参数值中有 perl 的特殊字符,则将参数嵌入到 perl 脚本中可能会导致麻烦。最好做类似的事情
crypt_pass() {
echo $(perl -e 'print crypt($ARGV[0], "aa")' "$1")
}
【讨论】: