以下のスクリプトはとても簡単です。&
次に変えてください&
。
string="Foo & Bar"
echo "${string//&/&}";
しかし、スクリプトは何もしません。エラーメッセージはなく、何も置き換えられません。
Foo & Bar
ついに解決策を見つけました。交換部品からアンパサンドをエスケープする必要があります。
string="Foo & Bar"
echo "${string//&/\&}";
私がまだ把握していないのはなぜ?スクリプトが期待どおりに機能しないのはなぜですか?なぜ最初の記号(例えば${string//\&/\&}
)ではなく最後の&記号だけをエスケープする必要があるのですか?
これは&記号が特別な意味を持つか、文字列の置換に使用されることを意味しますか?
答え1
ここでは、&
一致するパターンを表します。:
patsub_replacement
シェルを有効にするオプションを使用している場合は、引用符で囲まれていshopt
ない&
インスタンスひも一致する部品に置き換えられます。模様。これは一般的なsed
イディオムを繰り返すことです。
拡張機能がエスケープされない場合は、最終的には&
「」自体に置き換えられます。
この機能はBash 5.2に追加されました。