REST APIに対してカールを実行すると、シェルがキーの特殊文字(!)を解釈するのはなぜですか?
curl https://foo.my.salesforce.com/services/data/v28.0/ -H "Authorization: Bearer '00DE0000000K0eM!AQYAQGgmLxxxxxxxxxxx'"
-bash: !AQYAQGgmLxxxxxxxxxx'": event not found
~によるとこれ、一重引用符を使用すると、bashが文字列を解釈できなくなります。
私は解決策として\文字を試しましたが、これはキーを拒否しました。
curl https://foo.my.salesforce.com/services/data/v28.0/ -H "Authorization: Bearer '00DE0000000K0eM\!AQYAQGgmLxxxxxxxxx'"
[{"message":"Session expired or invalid","errorCode":"INVALID_SESSION_ID"}]
bashがこの文字列を解釈しないようにするにはどうすればよいですか?
ベストアンサー1
履歴拡張文字は!
二重引用符の間でも特別ですが、一重引用符の間では特別な意味を失います。
ここでは二重引用符で囲まれた文字列の中にあります"Authorization: Bearer '00DE0000000K0eM!AQYAQGgmLxxxxxxxxxxx'"
。この文字列の一重引用符は、この文字列の一般的な文字であり、特に解釈されません。これには単一引用符で囲まれた文字列はありません。
バックスラッシュを追加すると、履歴拡張は!
トリガーされませんが、バックスラッシュ自体はそのまま残ります。だからあなたはheaderで終わりますAuthorization: Bearer '00DE0000000K0eM\!AQYAQGgmLxxxxxxxxx'
。
ヘッダーが必要な場合は、Authorization: Bearer '00DE0000000K0eM!AQYAQGgmLxxxxxxxxx'
次のように指定できます。
curl https://foo.my.salesforce.com/services/data/v28.0/ -H 'Authorization: Bearer '\''00DE0000000K0eM!AQYAQGgmLxxxxxxxxxxx'\'