次のようにバックスラッシュエスケープで二重引用符コマンドの置き換えを使用することを検討してください。
echo "$(echo '\\')"
それは印刷されますが、\\
私はバックスラッシュだけを印刷すると予想しました。私の考えは(間違った)文字列全体を渡し、すべてのバックスラッシュエスケープを置き換えます。それからコマンド置換を実行します。もちろん、順序は逆です。
しかし、もし私たちがそうするなら
echo "$(echo '\')$"
として印刷されます\$
。コマンド置換を行う場合最初その後、その文字列はバックスラッシュエスケープに対して評価され、最終的\
には$
単一にまとめることができます。$
しかしそれは真実ではない。
バックスラッシュエスケープは物事の順序でどこに適していますか?
(この質問の背景は、sedコマンドに挿入するために文字列の正規表現文字を正しくエスケープする方法を研究していることです。)
ベストアンサー1
echo $(echo '\\')
私はそれが(つまり、外部引用符のないバリエーション)の出力として最もよく理解されていると思います、その結果は\\
。リテラル文字列$(...)
エンティティを置き換えるときのバックスラッシュの拡張コマンドの解釈です。 (これはエスケープ文字を文字列に格納するのと似ており、リテラル文字列として再解釈されません。)