
実行したい 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"