Bashがエスケープされた文字を解釈するのはなぜですか? [コピー]

Bashがエスケープされた文字を解釈するのはなぜですか? [コピー]

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'\'

おすすめ記事