参数未正确传递

| 我创建了一个用于加密密码的函数。但是第一个参数不能很好地传递。
crypt_pass \"a\"
输出与as1ѭ相同。我究竟做错了什么?
crypt_pass() {
    echo $(perl -e\'print crypt($1, \"aa\")\')
}
问候, 凯文     
已邀请:
如果参数值中包含perl特殊的字符,则将参数嵌入perl脚本中会导致麻烦。最好做类似的事情
crypt_pass() {
    echo $(perl -e \'print crypt($ARGV[0], \"aa\")\' \"$1\")
}
    
如果没有测试,我的猜测是在
\'
引号内,不会执行任何变量替换,而
$1
会按字面传递。     
您应该将Perl代码括在双引号中,这样bash可以在将字符串传递给Perl解释器之前替换其ѭ5。
crypt_pass() {
    echo $(perl -e\"print crypt($1, \\\"aa\\\")\")
}
由于在Perl中可以对字符串使用单引号,因此可以通过仅使用单引号来避免转义,因此它将变得更加简洁:
crypt_pass() {
    echo $(perl -e\"print crypt($1, \'aa\')\")
}
    

要回复问题请先登录注册