Вопрос, который вы задали, касается только того, как оболочка интерпретирует свой ввод и передает его другим программам. По сути, это не имеет ничего общего с Perl.
Вы должны просто иметь возможность поместить это в скрипт:
foo '$x;
$y;'
Аргумент, переданный команде, будет иметь новую строку в том же месте, что и в самом скрипте. Возможно, вам придется позаботиться о сохранении такого скрипта таким образом, чтобы он заканчивался переносами строк в стиле Unix (только для LF), в противном случае вы можете получить CR+LF (разрывы строк в DOS/Windows) или просто CR (старый Линейка в стиле Mac достигает максимума). Вы также можете сделать это в интерактивной подсказке, но перед второй и всеми последующими строками вы увидите подсказку продолжения:
$ foo '$x;
> $y;'
В bash вы также можете использовать синтаксис цитирования $''
для кодирования символа новой строки, например:
foo $'$x;\n$y;'
Аргумент, передаваемый программе, будет обрабатываться аналогично строке C ANSI. Если вы хотите, чтобы в строке был фактический обратный слеш, вы должны будете вместо него использовать \\
.
Так что, если вы действительно хотите использовать кавычки из буквенных строк, которые вам дают одинарные кавычки, вам, вероятно, следует придерживаться встроенной новой строки, чтобы вам не пришлось беспокоиться о дополнительном экранировании.