bash 命令产生奇怪的行为

a bash command generates strange behavior

我正在学习 bash 并且碰巧在 bash 中键入 var = "$(cat)",奇怪的是它进入并且 bash 提示消失,直到我使用 ctrl-c.

命令是什么var = "$(cat)"

bash-3.2$ var = "$(cat)"

^C
bash-3.2$

var=$(cat) 意味着您正在尝试存储执行命令 cat 的子 shell 的输出。但是,不带参数执行 cat 相当于 cat STDIN(也与 cat - 相同),如果您没有正确终止输入流,cat 仍会读取从 STDIN 直到它被中断(这就是为什么你认为你的提示消失了,但实际上,你在子 shell 中)。

由于您将 SIGINT 信号 (CTRL+C) 发送到(子)进程,因此命令和子 shell 以非 0 状态退出(您可以检查在 var=$(cat) 之后执行 echo $? 的退出状态对于被 SIGINT 终止的进程应该等于 130)。或者,您可以尝试向上述子 shell 的 STDIN 写入一些内容,然后发送 CRTL+D,当在给定终端上的一行开头键入时,表示输入结束,而不是CTRL+C。最后,您可以键入 echo $var 以检查变量赋值是否按预期工作。