考虑以下 Perl 单行代码:
perl -e '$x; $y;'
我正在执行这个命令狂欢我想在和\n
之间插入一个换行符 ( ) 。我想知道如何用两种类似但略有不同的方式做到这一点:;$y
我怎样才能通过按下某些元键序列来在该位置插入换行符?
我如何通过输入一些非元字符序列在该位置插入换行符?(例如
'$x;\n$y;'
)
在两种情况下,我都希望 Perl 解释器看到实际的换行符,如下所示:
$x;
$y;
答案1
删除空格,然后输入CtrlV, CtrlJ。
然后Return。
Ctrl-V 可防止 shell 按字面意思解释下一个字符(换行符)。
答案2
您问的问题仅涉及 shell 如何解释其输入并将其传递给其他程序。它本身与 Perl 无关。
此答案涉及在 shell 中键入新输入。使用其他人的答案,^V^J
在使用命令行编辑时将换行符插入现有命令行。
您应该可以将其放入脚本中:
foo '$x;
$y;'
传递给命令的参数将在与脚本本身相同的位置有一个换行符。您可能需要小心地以使用 Unix 样式(仅 LF)换行符的方式保存此类脚本,否则您可能会得到 CR+LF(DOS/Windows 换行符)或仅 CR(旧 Mac 样式换行符)。
您也可以在交互式提示下执行此操作,但您会在第二行及任何后续行之前看到继续提示:
$ foo '$x;
> $y;'
在狂欢,您还可以使用$''
引用对换行符进行编码的语法如下:
foo $'$x;\n$y;'
传递给程序的参数将以类似于 ANSI C 字符串的方式处理。如果您希望字符串中有一个实际的反斜杠,则必须将其转义为 , \\
。
因此,如果您确实想要单引号提供的文字字符串引用,您应该坚持使用嵌入的换行符,这样您就不必担心额外的转义。
答案3
将光标移动到位置然后按Ctrl- V Ctrl-J
答案4
这几乎是可能的。狂欢命令行,\(反斜杠)可用作行继续符。它实际上是转义字符; 它说狂欢将该行中的下一个字符视为特殊字符。
您可以在命令行标记之间使用它来将换行符添加到命令行中。您必须点击Return 立即地之后\就可以正常工作了:
# +-----Press return here!!
# V
user@host:$ cat foo | \
> perl -e '$x; $y'
如果删除'
重复行末尾的单引号(以及可选的更多字符),
perl -e '$x;\ $y
,然后按 ,Enter即可输入更多以单引号结尾的字符'
。请注意,$y 仍然有效。