Wil*_*ett 7 command-line bash printf
该命令会printf "#!/bin/bash\n" > t生成一个错误 ( bash: !/bin/bash\n": event not found),但按向上键不会调用该命令,因此我可以对其进行修改。这是为什么?
(我在这里尝试的东西可以通过printf "%s\n" '#!/bin/bash' >t我尝试学习 Bash 并且真的想了解为什么 bash 历史记录没有捕获上一个printf命令来完成。)
win*_*ner 14
!正如您所发现的,该角色会触发历史扩展。此步骤发生在将命令保存到历史记录之前,以便它可以在扩展已经完成的情况下保存到历史记录中。当历史扩展发生错误时,bash 停止处理命令,因此它永远不会保存到历史中。
历史扩展允许将先前命令或先前命令的一部分替换为当前命令。如果这是在将命令保存到历史记录之前完成的,则每次执行时可能意味着不同的内容,因为之前的命令在每个实例中都是不同的。见http://www.gnu.org/software/bash/manual/bashref.html#History-Interaction
作为参考,zsh的行为是不同的。它将保存命令,但缺少历史扩展。