sed
ETAラボに表示されている命令を理解しようとしています。Richのsh(POSIXシェル)トリックページ、特にヒントシェルは任意の文字列を引用します。:
quote () { printf %s\\n "$1" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/'/" ; }
sed
3番目のコマンド()では、1番目のコマンドは、\$s/\$/'/
シェル$
がそれを仮定された変数として解釈できないようにエスケープされ、次のように渡され、正しく解釈されることができること$s
を理解しています。sed
最後の行コマンドのアドレスs
ですが、なぜ2番目のコマンドをエスケープするのですか$
?行末と正確に一致してはいけませんか?
答え1
行末ではなくリテラルになるように、$
コマンドから正規表現の末尾をエスケープするだけです。sed
バックスラッシュがシェルで食べるため、コマンドsed
にエスケープはありません。$
表示されるコマンドsed
は次のとおりです$s/$/'/
(最後の行の行末に一重引用符を追加します)。
結局のところ、あなたの質問のタイトルは間違っています。sed
脱出ではなく、シェル脱出についてです。