【问题标题】:Parameter not passed through well参数没有很好地传递
【发布时间】:2011-08-05 10:23:53
【问题描述】:

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

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

问候, 凯文

【问题讨论】:

    标签: linux bash unix passwords


    【解决方案1】:

    没有测试过,我的猜测是在' 引号内,没有执行变量替换,$1 是按字面意思传递的。

    【讨论】:

    • 是的,$1 被解释为 Perl 变量,而不是 Bash 变量。
    • 嗯,怎么串联对吧?我试过crypt('.$1.'),但没用.. :(
    【解决方案2】:

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

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

    由于在 Perl 中您可以对字符串使用单引号,因此您可以通过使用单引号来避免转义,这样会变得更简洁:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 是的,这样更好,我在回答中完全忘记了这个问题。
      猜你喜欢
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 2020-09-22
      相关资源
      最近更新 更多