RichのPOSIXシェルのヒント - sedコマンドで$をエスケープするのはなぜですか?

RichのPOSIXシェルのヒント - sedコマンドで$をエスケープするのはなぜですか?

sedETAラボに表示されている命令を理解しようとしています。Richのsh(POSIXシェル)トリックページ、特にヒントシェルは任意の文字列を引用します。:

quote () { printf %s\\n "$1" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/'/" ; }

sed3番目のコマンド()では、1番目のコマンドは、\$s/\$/'/シェル$がそれを仮定された変数として解釈できないようにエスケープされ、次のように渡され、正しく解釈されることができること$sを理解しています。sed最後の行コマンドのアドレスsですが、なぜ2番目のコマンドをエスケープするのですか$?行末と正確に一致してはいけませんか?

答え1

行末ではなくリテラルになるように、$コマンドから正規表現の末尾をエスケープするだけです。sed

バックスラッシュがシェルで食べるため、コマンドsedにエスケープはありません。$表示されるコマンドsedは次のとおりです$s/$/'/(最後の行の行末に一重引用符を追加します)。

結局のところ、あなたの質問のタイトルは間違っています。sed脱出ではなく、シェル脱出についてです。

関連情報