“cd `”(反引号)命令导致“>”,为什么以及如何退出它?

Vai*_*ari 6 command-line bash

当我打字

cd `
Run Code Online (Sandbox Code Playgroud)

进入终端,然后我得到这个

>
Run Code Online (Sandbox Code Playgroud)

甚至lscd不工作。尝试在>提示符下运行这样的命令只会给出另一个>提示。

请解释上述命令的含义。我该如何退出它?

Kul*_*lfy 13

反引号成对起作用。Bash 正在等待您提供另一个反引号来完成命令/表达式。

>只是换行的提示,由PS2.bashrc中通常定义的值决定。

每当您点击时Enter(如果命令/表达式不完整,即反引号未关闭),bash 期望您在一行或多行中完成命令/表达式。例如,您想使用 来评估 'a' 的值expr。你可以做

$ a=`
> expr 1 + 3`
Run Code Online (Sandbox Code Playgroud)

将被解释为

$ a=`expr 1 + 3`
Run Code Online (Sandbox Code Playgroud)

因此,如果您想运行某些命令,要么完成所需的表达式,要么在反引号之间不需要命令/表达式,请不要使用它。另一种方法是使用Ctrl+ C,但这将是键盘中断,并使您的命令立即终止。

要了解有关反引号的更多信息,请阅读有关 U&L 的这些问题:了解反引号`(反引号/反引号)在命令中的含义是什么?


use*_*001 7

反引号创建了一个称为命令替换的执行环境。它是这样使用的,例如:

echo "The date today is `date`"
Run Code Online (Sandbox Code Playgroud)

在这里,date命令首先被执行,它的输出替换了反引号之间的部分,所以最后你会得到一个带有当前日期的字符串。

命令替换可能跨越多行,因此当您键入时:

cd `
Run Code Online (Sandbox Code Playgroud)

并按Enter,bash 期望您在执行cd命令之前完成命令替换。这可以通过关闭反引号并按Enter或按CTRL-来破坏c(这将中止命令而不执行任何操作)。

请注意,现代指南倾向于避免命令替换的反引号语法,$( )而是使用反引号语法,因此第一个示例是:

echo "The date today is $(date)"
Run Code Online (Sandbox Code Playgroud)