Use isso para ativar a expansão de variáveis:
myvar=$(perl -e 'print "AAA" x ('"$i"')')
Estou tendo alguns problemas ao tentar inserir uma variável bash dentro do meu código perl. A finalidade do código é executar um determinado comando de impressão perl em um terminal usando um arquivo de script bash. Eu simplifiquei meu problema para o código abaixo:
i=5
myvar=$(perl -e 'print "AAA" x ($i)')
echo "$myvar"
Tendo uma variável i com 5 como seu valor, quero imprimir a string "AAA" tantas vezes quanto o valor de i, que é 5 neste exemplo. Para fazer isso eu quero usar o código perl dado. Atualmente, o código perl não pode ler o conteúdo da minha variável i. Isso é mais provável devido ao fato de que "" não está sendo usado para a parte em que peço o valor de i.
Mudar o 'e o' não é realmente uma possibilidade, já que o String "AAA" será substituído por códigos hexadecimais a serem usados para o shellcode. Usar o $ para executar o código perl é necessário para executá-lo no terminal como um argumento de uma função. E, claro, o valor de eu vou incrementar / mudar em um loop, então não posso simplesmente usar 5 em vez de i.
Alguma ajuda para tornar o código perl capaz de ler o valor de i ou contornar esse problema das anotações?
O Perl tem uma forma rudimentar de análise de opções integrada. Funciona muito como a opção -v
do awk, mas é mais feia
myvar=$(perl -s -e 'print "AAA" x ($j)' -- -j="$i")
Isso passa o $i
do shell para o perl como uma variável perl $j
. O hífen duplo é necessário para que o -j
não seja devorado pelo próprio binário do perl.
O problema é o tipo de cotação que você está usando. As aspas simples fazem com que a expansão da variável shell não seja feita.
i=5
myvar=$(perl -e "print 'AAA' x ($i)")
echo "$myvar"
Este código funciona como pretendido.