参数未通过

时间:2011-04-14 10:27:09

标签: linux bash unix passwords

我创建了一个加密密码的功能。但是第一个参数没有通过。 crypt_pass "a"输出与crypt_pass "b"相同。我做错了什么?

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

此致 凯文

3 个答案:

答案 0 :(得分:2)

如果没有对它进行测试,我的猜测就是在'引号内,不执行变量替换,并且$1按字面顺序传递。

答案 1 :(得分:1)

你应该用双引号括起Perl代码,这样bash可以在字符串传递给Perl解释器之前替换它的$1

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

因为在Perl中你可以使用单引号作为字符串,你可以通过使用单引号来避免转义,所以它会变得更清晰:

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

答案 2 :(得分:1)

如果参数值中存在perl特殊字符,则将参数嵌入perl脚本可能会导致问题。最好做点什么

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