cd ` (反引号)的用途是什么?

cd ` (反引号)的用途是什么?

以下在 Fedora 和 CentOS 中的行为相同。

cd mydirectory

作品。

cd notadirectory

有效(从 Bash 获取错误)。

然而,

cd `

给我一些提示:

>

我输入的任何内容都没有得到任何响应,它只是转到下一行再次提示。我只需使用CTRL+C退出回到我的root@localhost

这样做的目的是什么以及可以用它做什么?

谢谢!

答案1

您输入的是反引号- 这是指示 bash 评估您输入的命令的指令的开始。显示>表示您仍在下一行输入命令。

如果你关闭反引号,你会发现整个命令都会运行。例如

~$ cd `
> echo /var`
/var$

答案2

JohnC 的回答已经解释了反引号。但你还想知道的是>提示。这是一个连续提示,它不仅由反引号触发,而且总是当你的 shell 清楚地知道你还没有输入完命令时。最简单的例子是\在输入行的末尾放置一个显式的行延续符(这有助于拆分长输入):

$ echo \
> hallo

PS1请注意,就像控制命令提示符的外观一样,您也可以设置PS2更改继续提示,例如

$ export PS2="(cont.) "
$ echo \
(cont.) hallo

导致继续执行的原因有很多。单个反引号是不完整的,但您也可以输入类似

ls -l `which cp`

在一行中(旁注:建议使用$(and)代替,因为括号可以清楚地显示扩展的开始和结束位置,而单个反引号会使人更难看出遗漏的位置。以及嵌套......)。出现延续提示的其他可能原因:

  • done之后缺失whilefor
  • 失踪fiif
  • 失踪esaccase
  • 缺少右括号,例如在子 shell 中(cd $HOME; cat .bashrc)
  • 管道传输后缺少命令|以及条件执行||&&但不是&,因为这只是使命令在后台运行)
  • 缺少结束引文('"

}奇怪的是,变量扩展后缺少括号${也会导致继续提示,但会因插入的空格而失败:

$ echo ${
> PS2}
bash: ${
PS2}: bad substitution

答案3

这意味着你的命令尚未完成。事实上,字符反引号`是用来分隔内联命令的。

例子:

cd /tmp # Go to /tmp
pwd # Prints the current working  directory
ls `pwd` # Lists the content of the current working directory

答案4

反引号开始/结束命令替换。shell 读取反引号内的命令,解释结果,并将这些结果放入命令中。例如:lswhich cp导致执行“which cp”,并且该命令的结果(即 /bin/cp)将用作 ls 命令的参数。但是,这种行为已被弃用,取而代之的是更明确、更易读的 $(cmd) 命令替换。

当输入 cd ` 时,shell 期望执行一个命令,并以反引号结尾。

在使用大括号进行变量扩展的情况下,shell 会显示继续提示,因为这些大括号在扩展完成之前会进行词汇评估。

相关内容