今天我不小心在终端中输入了 cd `,终端做了一些奇怪的事情。
它在下一行添加了一个“>”符号,后面跟着我的光标,就像它需要一些输入一样。无论我输入什么,都会继续做同样的事情,直到我终止命令。
出于好奇,发生了什么?这是一个错误还是一个功能?
答案1
您所看到的效果是由于 shell 期待另一个反引号。例如,当您输入(
(或任何其他不完整的命令)并按Return命令行时,您会得到相同的效果。
您收到的提示>␣
是二次提示,如存储在$PS2
.当需要更多交互式输入才能最终完成命令时,shell 将使用此提示符。
一个例子:
bash-4.4$ for i in {0..10..2}
> do
> printf 'Hello %d\n' "$i"
> done
Hello 0
Hello 2
Hello 4
Hello 6
Hello 8
Hello 10
bash-4.4$
bash-4.4$
是我的主要提示( ),并且在第一行按after$PS1
时会收到第二个提示,因为到目前为止输入的命令尚未完成。我继续在每一行上获得辅助提示,直到通过按after完成命令(这完成了 for 循环到 shell 的输入)。Return{0..10..2}
Returndone
这三级提示( $PS3
,通常#?␣
) 由关键字使用select
,而四元1提示当 shell选项设置为时, ($PS4
通常+␣
) 用于跟踪输出。xtrace
set -x
1 是的,我必须查一下这个词。
答案2
在这里回答了已经... 本质上
您在反引号之间键入的所有内容都会在主命令之前由 shell 计算(执行)