Docker の環境変数で「!」と「&」をエスケープする方法

Docker の環境変数で「!」と「&」をエスケープする方法

実行したい Docker コンテナがあり、それにパスワードをいくつか渡します。1 つは感嘆符付き!、もう 1 つはアンパサンド付きです&。そのため、これを実行したいと思います。

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"

関連情報