1

Рассмотрим следующую строку Perl:

perl -e '$x; $y;'

Я выполняю эту команду в bash, и я хотел бы вставить новую строку (\n) между ; и $y . Я хотел бы знать, как это сделать двумя похожими, но немного разными способами:

  1. Как я могу вставить новую строку в эту позицию, нажав некоторую последовательность мета-клавиш для вставки новой строки?

  2. Как я могу вставить новую строку в эту позицию, набрав некоторую немета-символьную последовательность? (например, '$x;\n$y;')

В обеих ситуациях я хочу, чтобы интерпретатор Perl видел реальную новую строку, например:

$x;
$y;

5 ответов5

3

Вопрос, который вы задали, касается только того, как оболочка интерпретирует свой ввод и передает его другим программам. По сути, это не имеет ничего общего с Perl.

Этот ответ касается ввода нового ввода в оболочку. Используйте ответ других на ^V^J чтобы вставить новую строку в существующую командную строку при использовании редактирования командной строки.

Вы должны просто иметь возможность поместить это в скрипт:

foo '$x;
$y;'

Аргумент, переданный команде, будет иметь новую строку в том же месте, что и в самом скрипте. Возможно, вам придется позаботиться о том, чтобы сохранить такой скрипт таким образом, чтобы использовать разрывы строк в стиле Unix (только для LF), в противном случае вы можете получить CR+LF (разрывы строк в DOS/Windows) или просто CR (старый Mac- стиль lineb рождает).

Вы также можете сделать это в интерактивной подсказке, но перед второй и всеми последующими строками вы увидите подсказку продолжения:

$ foo '$x;
> $y;'

В bash вы также можете использовать синтаксис цитирования $'' для кодирования символа новой строки, например:

foo $'$x;\n$y;'

Аргумент, передаваемый программе, будет обрабатываться аналогично строке C ANSI. Если вы хотите, чтобы в строке был фактический обратный слеш, вы должны будете вместо него использовать \\ .

Так что, если вы действительно хотите использовать кавычки из буквенных строк, которые вам дают одинарные кавычки, вам, вероятно, следует придерживаться встроенной новой строки, чтобы вам не пришлось беспокоиться о дополнительном экранировании.

2

Переместите курсор в положение, затем нажмите Ctrl - V Ctrl - J

2

Удалите пробел, затем введите Ctrl V, Ctrl J.
Тогда вернитесь.

Ctrl-V не позволяет оболочке интерпретировать следующий символ (перевод строки) буквально.

1

Если вы хотите редактировать pico, vi или emacs, вы можете использовать встроенную команду fc которая обозначает fix command .

Вы можете использовать fc и Bash откроет вашу последнюю команду в определенном редакторе, таком как vi, emacs и т.д. Я использую для этого пико. Вы можете очень легко использовать многострочное редактирование.

Вы можете использовать перевод строки и формат для редактирования команды. После выхода из редактора команда сохраняется в буфере Bash и сразу же выполняется.

В Bash попробуйте это:

$ FCEDIT=pico
$ perl -e ''
$ fc

Команда FCEDIT=pico просто устанавливает редактор в pico. Установите любой редактор, который вы хотите. Вы можете экспортировать это и сделать постоянным, если хотите.

Команда perl -e '' - это пустая оболочка вокруг вашего нового однострочного сценария perl. Когда вы fc последняя команда открывается в определенном редакторе.

Теперь в Pico перейдите к '' и вставьте свой Perl-скрипт. Помните, что сценарий не такой, как если бы вы сохраняли его в текстовый файл, и к нему также необходимо знать, как оболочка будет интерпретировать ввод между одинарными кавычками. Главным образом, вам нужно будет избежать одиночной кавычки с \

В pico вставьте любой код Perl, который вы хотите (при условии его интерпретации в Bash ...)

Я сделал это:

perl -e  '
print "hello\n";
print "here is a second line\n";
$i=1;
$y=2;
print "\$i=$i, \$y=$y\n\n";
'

Теперь сохраните файл с именем по умолчанию. (В пико Ctl+O - записать) и выйти из пико (Ctl+x). Bash теперь выдает эхо, а затем выполняет вашу команду.

fc в разделе 9.2 руководства GNU ЗДЕСЬ

0

Это почти возможно. В командной строке bash \ (обратный слеш) можно использовать как символ продолжения строки. Это на самом деле спасательный персонаж ; он говорит bash обрабатывать следующий символ в строке как специальный.

Вы использовали бы это между токенами командной строки, чтобы добавить новые строки в командную строку. Вы должны нажать Return сразу после \, чтобы он вообще работал:

#                      +-----Press return here!!
#                      V
user@host:$ cat foo | \
>           perl -e '$x; $y'

Если вы удалите одиночную кавычку, ' , (и, возможно, больше символов) в конце повторяющейся строки,

perl -e '$x;\ $y

и нажмите Enter, тогда можно будет ввести больше символов, заканчивающихся одинарной кавычкой, ' . Обратите внимание, что $ y все еще активен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .