我创建了一个加密密码的功能。但是第一个参数没有通过。 crypt_pass "a"
输出与crypt_pass "b"
相同。我做错了什么?
crypt_pass() {
echo $(perl -e'print crypt($1, "aa")')
}
此致 凯文
答案 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")
}