【问题标题】:Ksh script decode base64 using Perl one-linerKsh 脚本使用 Perl 单线解码 base64
【发布时间】:2017-05-19 19:35:43
【问题描述】:

尝试使用像./decodetest.sh '"ZW5jb2RlIG1lCg=="' 这样的脚本解码"ZW5jb2RlIG1lCg==" 不会返回任何内容。我正在传递带单引号的 base64 字符串以保留命令的双引号。任何帮助表示赞赏或任何替代方案。

#!/bin/ksh 
OBJECT=$1
perl -MMIME::Base64 -e 'print decode_base64(${OBJECT})'
#echo ${OBJECT}

在命令行下面运行正确输出“encode me”。

perl -MMIME::Base64 -e 'print decode_base64("ZW5jb2RlIG1lCg==")'

【问题讨论】:

    标签: perl ksh


    【解决方案1】:

    与其尝试使嵌套引号起作用,不如将参数作为参数传递会更简洁:

    #!/bin/ksh
    OBJECT=$1
    perl -MMIME::Base64 -e 'print decode_base64($ARGV[0])' "$OBJECT"
    

    【讨论】:

    • 更好。我根本不必担心引用输入。谢谢!
    • 或者直接传$1而不是赋值给OBJECT再传副本。虽然如果这是一个长代码,分配给另一个变量以使其自我记录是有意义的。
    【解决方案2】:

    在 Perl 中可以通过 %ENV hash 访问 Shell 环境变量

    perl -MMIME::Base64 -e 'print decode_base64($ENV{OBJECT})'
    

    您可能需要对 ksh 中的变量调用 export 以使其对子 shell 可见。

    OBJECT=$1
    export OBJECT
    perl -MMIME::Base64 -e 'print decode_base64($ENV{OBJECT})'
    

    或

    export OBJECT=$1
    perl -MMIME::Base64 -e 'print decode_base64($ENV{OBJECT})'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-22
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 2020-04-18
      • 2011-12-29
      相关资源
      最近更新 更多