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


58

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

cd mydirectory

作品。

cd notadirectory

工作(从Bash获取错误)。

然而,

cd `

给我一些提示:

>

我没想到任何东西会给出任何回应,它只是转向下一行再次提示。我只是用CTRL+ C退出我的root@localhost

这个的目的是什么,用它可以做些什么?

谢谢!



6
所以你的问题更多的是关于>
反击

Answers:


125

你输入的内容是反引号 - 它是bash评估你输入命令的指令的开始。该>显示指示你还在下一行输入命令。

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

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

17
你甚至可以嵌套它们。对于一个有点现实的例子:cd `dirname \`which ls\``= cd到“ls”二进制文件所在的目录。(即,cd /bin因为它是/bin/ls)[编辑:phew,逃避降价
很难

54
@MSalters你也许在现代为什么喜欢bash的原因跌跌撞撞$()``。你的例子(加上正确的引用)会变得cd "$(dirname "$(which ls)")"更加疯狂。
Muzer 2017年

31
@Muzer不仅仅是bash更喜欢它,但是在POSIX规范中建议使用$()反引号。
海星2017年

60

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

$ echo \
> hallo

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

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

继续发生的原因有很多。单个反引号不完整,但您也可以输入类似的内容

ls -l `which cp`

在一行中(旁注:建议使用$()不是,因为括号使得扩展开始和结束的位置变得明显,而单个反引号使得更难以看到缺少的位置。并且嵌套......)。继续提示的其他可能原因:

  • 失踪donewhilefor
  • 一个失踪fiif
  • 失踪esac之后case
  • 缺少右括号,例如在子壳中 (cd $HOME; cat .bashrc)
  • 管道后失踪的命令|,以及条件执行||&&(未&不过,因为那只是让在后台运行的命令)
  • 缺少收盘报价('"

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

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

2
使用引号时
也会

1
当我在侧边栏中看到这个问题时,我已经知道了这个问题的答案,但我想给你一个额外的,虽然想象中的+1,这是一个非常好的深入答案。这种内容使StackExchange站点变得非常棒。所以...谢谢,并继续保持真棒。
Unkwntech 2017年

4

这意味着您的命令尚未完成。实际上,字符反引号`用于分隔内联命令。

例:

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

0

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

当键入cd时`shell期望执行一个命令,然后关闭一个反引号。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.