Как экранировать "!" и "&" в переменных среды Docker

Как экранировать "!" и "&" в переменных среды Docker

У меня есть docker-контейнер, который я хочу запустить и передать ему несколько паролей. Один с восклицательным знаком !, а другой с амперсандом &. Поэтому я хочу запустить это:

docker run -i -t --rm \
-e "LDAP_FILTER=(&(objectCategory=person)(objectClass=user)" \
-e "LDAP_PASS=Secret!Password" \
user-prefix/container-name

Это не работает. &заменяется на {LDAP_FILTER}и !усекается. Я почти уверен, что мне нужно их экранировать. Но \!и \&не сработало.

решение1

Я нашел решение:

  • Использование одинарных кавычек вместо двойных
  • Избавьтесь от амперсанда &, чтобы\&
  • Не избежав восклицательного знака!

так что это работает:

docker run -i -t --rm \
-e 'LDAP_FILTER=(\&(objectCategory=person)(objectClass=user)' \
-e 'LDAP_PASS=Secret!Password' \
user-prefix/container-name

решение2

Если по какой-то причине вы не можете использовать одинарные кавычки для всей строки (например, при расширении переменной), то это, вероятно, лучшее решение:Как убрать восклицательный знак в bash?

Подводя итог: Используйте "'!'"вокруг восклицательного знака:

echo "hello there"'!'" and goodbye"

Связанный контент