perl и bash подстановка переменных, с шестнадцатеричными символами и количеством повторений - PullRequest
1 голос
/ 05 февраля 2020
alex@d120432:~$ echo $0
bash
alex@d120432:~$ perl -e 'print "\x41\x42\x43\x44\x0a"x2'
ABCD
ABCD
alex@d120432:~$ i=2
alex@d120432:~$ echo $i
2
alex@d120432:~$ perl -e 'print "\x41\x42\x43\x44\x0a" x $i'
alex@d120432:~$

Возможно ли получить такой же вывод во второй команде perl? Я не могу найти правильный синтаксис для использования i в качестве числа повторов.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Вам нужно будет избегать внутренних двойных кавычек и использовать двойные кавычки в оболочке для расширения переменной:

perl -e "print \"\x41\x42\x43\x44\x0a\" x $i"

ABCD
ABCD

Может также работать следующий вариант:

perl -e 'print "\x41\x42\x43\x44\x0a" x '$i
1 голос
/ 05 февраля 2020

Хотя Perl использует двойную кавычку для интерполяции, как и оболочка, Perl предоставляет альтернативу qq{} .

Разделителями {} могут быть любые спарить вас sh. Использование этой конструкции может исключить необходимость экранирования кавычек в описанной ситуации; например:

perl -e "print qq(\x41\x42\x43\x44\x0a) x $i"
...