ヒアドキュメントの文字をどのようにエスケープしますか?


22

私は、ヒアドキュメント内の変数を置換しようとするのを阻止しようと、bashスクリプトを使用しています。ヒアドキュメントをA)変数名を解析する代わりにエスケープするか、B)文字列全体をそのまま返すように設定するにはどうすればよいですか?

cat > /etc/nginx/sites-available/default_php <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/$host; <--- $host is a problem child
}
END

そのまま、ファイルへの挿入が完了すると、次のようになります。

server {
    listen 80 default;
    server_name _;
    root /var/www/;
}

回答:


33

bash(1)manページから:

内の任意の文字場合の単語が引用され、 区切り文字は、上の引用の除去の結果である単語、そしてここで、文書内の行が展開されません。

cat > /etc/nginx/sites-available/default_php <<"END"

3
+1「制限文字列」のエスケープも機能します(\END)。参照してくださいtldp.org/LDP/abs/html/here-docs.html#EX71C
ジョン・マッカーシー

単一引用符も
有効です

同じメカニズムがKornシェル(ksh)でも機能します。
jhfrontz

19

バックスラッシュだけで:

cat > /tmp/boeboe <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/\$host';
}
END

各値をエスケープせずに変数値の注入を無効にする方法を知っていますか?
Xeoncross

2
イグナシオが言ったことですが、私はそれを知りませんでした:)
Halfgaar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.