字符串 `!23` 在命令行中被替换为 `docker`

Vit*_*gov 17 bash

我有一个带有参数的 Maven 命令:

mvn test -Dcommon_password=!23foo
Run Code Online (Sandbox Code Playgroud)

此命令正在执行为

mvn test -Dcommon_password=dockerfoo
Run Code Online (Sandbox Code Playgroud)

!23正在取代docker。为什么会发生这种情况,我该如何避免?

Ste*_*itt 43

这是历史扩展!23替换为历史记录中的第 23 个命令。

为避免这种情况,请使用单引号:

mvn test '-Dcommon_password=!23foo'
Run Code Online (Sandbox Code Playgroud)

  • 这是一个可能包含各种 shell 元字符的密码。在 M. Kitt 的回答中正确引用和转义比禁用可能发生的可能性中的_只是一个_要好。当然,首先在进程参数中没有密码会_更好_。(-: (12认同)
  • 或使用 `set +H`/`set +o histexpand` 完全禁用它 (5认同)