参数传递不好

发布于 2024-11-01 16:00:52 字数 208 浏览 1 评论 0原文

我创建了一个用于加密密码的函数。但是第一个参数没有传递好。 crypt_pass "a" 输出与 crypt_pass "b" 相同。我做错了什么?

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

问候, 凯文

I created a function for crypting passwords. But the first parameter is not passed through well. crypt_pass "a" outputs the same as crypt_pass "b". What am I doing wrong?

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

Regards,
Kevin

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无名指的心愿 2024-11-08 16:00:52

未经测试,我的猜测是在 ' 引号内,不执行变量替换,并且 $1 按字面意思传递。

Without having tested it, my guess would be that inside ' quotes, no variable substitution is performed, and the $1 is passed literally.

醉酒的小男人 2024-11-08 16:00:52

如果参数值中存在 Perl 特有的字符,则将参数嵌入到 Perl 脚本中可能会导致麻烦。最好做类似的事情

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

Embedding the parameter inside a perl script can lead to trouble if there are characters special to perl in the parameter value. Best to do something like

crypt_pass() {
    echo $(perl -e 'print crypt($ARGV[0], "aa")' "$1")
}
甜警司 2024-11-08 16:00:52

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

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

由于在 Perl 中您可以对字符串使用单引号,因此您可以通过仅使用单引号来避免转义,因此它会变得更干净一些:

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

You should enclose the Perl code in double quotes, this way bash can substitute its $1 before the string is passed to the Perl interpreter.

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

Since in Perl you can use single quotes for a string, you can avoid the escaping by just using single quotes, so it would become a bit cleaner:

crypt_pass() {
    echo $(perl -e"print crypt($1, 'aa')")
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文