Строка `! 23` заменяется на` docker` в командной строке

17

У меня есть команда Maven с параметром:

mvn test -Dcommon_password=!23foo

Эта команда выполняется как

mvn test -Dcommon_password=dockerfoo

Т.е. !23заменяется на docker. Почему это происходит и как я могу избежать этого?

Виталий Плагов
источник

Ответы:

43

Это расширение истории : !23заменено 23-й командой в вашей истории.

Чтобы избежать этого, используйте одинарные кавычки:

mvn test '-Dcommon_password=!23foo'
Стивен Китт
источник
5
или отключить его полностью с set +H/set +o histexpand
ilkkachu
12
Это пароль, который потенциально может содержать все виды метасимволов оболочки. Правильно цитировать и избегать, как в ответе М. Китта, лучше, чем отключить только одну из возможных возможностей. Конечно, лучше не иметь пароль в аргументах процесса . (-:
JdeBP
@JdeBP в своем вопросе я показал пароль в виде простого текста просто из соображений простоты. В реальном проекте этот аргумент берет значение из секретных учетных данных Дженкинса. Так что это замаскировано и безопасно.
Виталий Плагов