输入 \ 后终端显示 >

Cur*_*roo 27 command-line bash

当我按下反斜杠时\,我得到一个>(大于)符号。这是什么意思?

Kul*_*lfy 36

每当您使用命令行时,可能会出现需要运行很长命令的情况。因此,您希望将命令拆分为多行以提高可读性和理解性。但是如果你使用由 键入的换行符Enter,shell 会认为它是一个新命令。所以你使用\后跟换行符。

基本上,命令或 bash 脚本被“解释”,即逐行执行。每一个新行都意味着一个新命令的开始。在终端中,当您按下 时Enter,您会收到运行新命令的提示。因此,需要“转义”一个新行。键入\后跟Enter允许您将当前命令拆分为多行,因此 shell 不会认为它是一个新命令,而是前一个命令的延续。

> 只是提示输入命令的下一行。

例如:
如果我们要安装多个包,命令会像

$ sudo apt install [package1] [package2] [package3] ...
Run Code Online (Sandbox Code Playgroud)

但有时,这会使命令变得混乱。所以我们可以使用\后跟Enter(换行符)

$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...
Run Code Online (Sandbox Code Playgroud)

  • @Curiouskangaroo 顺便说一句,您可以通过为 `$PS1` 和 `$PS2` 变量设置值来控制 *new 命令* 和 *line continuation* 提示的工作方式。查看 bash 手册页了解格式,并使用 `echo "'$PS2'"` 查看当前设置。 (4认同)

Mel*_*ius 15

反斜杠字符 ( \)在 shell 中用作转义字符。如果您将它用作该行的最后一个字符,它将转义换行符,因此您可以在下一行继续您的命令而不是完成它。这由>Bash 中的提示指示。

例子:

$ echo A\
> B
AB
$
Run Code Online (Sandbox Code Playgroud)

要将文字添加\到您的命令中,您必须使用另一个反斜杠对其进行转义:

$ echo \\
\
$
Run Code Online (Sandbox Code Playgroud)


Oli*_*lac 8

[添加一个(太长/复杂)答案,因为其他 2 个没有提到“>”是如何出现的......即,不要提到 PS2]

你输入:\Enter: 对\shell 说只将 the作为文字字符输出Enter而不是像往常一样解释它(因此 shell“转到下一行”而不是终止当前命令行并解释它。除非你在某个其他结构,如heredoc、for 循环等)。

因此,您的终端解释\Enter为:“转到下一行”(不开始解释命令),因此终端现在允许您输入多行命令的第二行,并使其更明显地显示$PS2内容(在每个后续行中称为PS2 提示)。

PS2变量通常是默认定义是:PS2="> "你可以为为例编辑你的〜/ .bashrc如你所愿(考虑到重新定义它,它应该,国际海事组织,避免含危险字符,如>;,并且应该帮助你要么清楚地看到它是一个多行命令,但禁止它的多内容(例如:PS2="#cont#")用或让你轻松复制/粘贴它们作为其线条尽可能小的影响(例如:PS2=" "

顺便说一句,imo 是一个糟糕的默认设置,因为它很可能导致在某些情况下删除一些重要的二进制命令。

您可以将 PS2 重新定义为其他东西(我喜欢:PS2=" ",例如),以便可以轻松复制/粘贴多行命令,而不必担心以下情况:

例如,假设您有一个开始很长的命令(如果您的终端不够宽,可能会在您的屏幕上折叠):

grep -i "something"  /some/file  /another/file /3rd/file /etc/someimportantfile 
Run Code Online (Sandbox Code Playgroud)

如果命令看起来太长(并且环绕),您可能希望将它从视觉上分成 2 行,方法是通过\Enter在适当的位置插入:来选择下一行的位置(何时):

grep -i "something"  /some/file  /another/file /3rd/file \
> /etc/someimportantfile #warning, "> " was inserted by the shell and this changes everything !
Run Code Online (Sandbox Code Playgroud)

使用默认的 PS2,shell 在 "/etc/someimportantfile " 之前添加了 "> " .. 所以如果你在另一个终端中复制/粘贴这两行,它们的动作将完全不同:grep 不是 4 个文件,而是只进入前 3 个文件,grep输出替换第 4 个文件(/etc/someimportantfile)的内容!

为了避免这些问题(以及许多其他问题):例如,您可以定义:PS2=" "使多行命令更清晰,更易于复制/粘贴:

grep -i "something"  /some/file  /another/file /3rd/file \
  /etc/someimportantfile #now only 2 spaces were inserted, without changing the grep's actions!
Run Code Online (Sandbox Code Playgroud)

注意这次 /bin/somecommand 是如何简单地向右移动 2 个空格,并且没有插入“>”,因此您可以安全地复制/粘贴这个 2 行命令。

PS2 也用于“for”“while”等循环,将它定义为“”,对我来说,在这些循环中也更好。