我在尝试在 Perl 代码中插入 bash 变量时遇到一些麻烦。该代码的目的是使用 bash 脚本文件在终端中执行特定的 perl 打印命令。我已将问题简化为以下代码:
i=5
myvar=$(perl -e 'print "AAA" x ($i)')
echo "$myvar"
有一个值为 5 的变量 i,我想打印字符串“AAA”与 i 的值一样多的次数,在本例中为 5。为此,我想使用给定的 perl 代码。目前,perl 代码无法读取我的变量 i 中的内容。这很可能是因为“”没有用于我询问 i 值的部分。
切换 ' 和 " 并不是真正的可能性,因为字符串“AAA”将被替换为用于 shellcode 的十六进制代码。使用 $ 执行 perl 代码需要在终端中作为 a 的参数执行。当然,i 的值会在循环中递增/更改,因此我不能只使用 5 代替 i。
有什么帮助可以使 perl 代码能够读取 i 的值或解决注释的这个问题吗?
答案1
使用它来启用变量扩展:
myvar=$(perl -e 'print "AAA" x ('"$i"')')
答案2
Perl 内置了一种基本形式的选项解析。它的工作方式很像 awk 的-v
选项,但它更丑陋
myvar=$(perl -s -e 'print "AAA" x ($j)' -- -j="$i")
它将 shell$i
作为 perl 变量传递到 perl 中$j
。需要双连字符,以便-j
不会被 perl 二进制文件本身吞噬。
答案3
问题在于您使用的引用类型。单引号导致 shell 变量扩展不是待完成。
i=5
myvar=$(perl -e "print 'AAA' x ($i)")
echo "$myvar"
该代码按预期工作。