bashスクリプトで引用符をエスケープする方法という興味深い問題に直面しました。
私のbashスクリプトには長いカール呼び出しがあり、大きな-d json構造が渡されます。
#!/bin/bash
Value4Variable=Value4
curl -s -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d \
'{"Variable1":"Value1",
"Variable2":"Value2\'s", # escape of quote doesnt work because of the previous single quote and backslash
"Variable3":"Value3",
"Variable4":"'"$Value4Variable"'",
"Variable5":"Value5"
}' \
https://www.hashemian.com/tools/form-post-tester.php
json構造に一重引用符を追加する最善の方法は何ですか?私は成功しなかった様々な組み合わせを試しました。
ベストアンサー1
異なる引用符を使用して長い文字列をエスケープする方法はいくつかあります。最も簡単な方法は、一重引用符を終了して一重引用符をエスケープすることです。
'...'\''...'
しかし、より良いことができます。 Heredocsは引用の問題を避けるための良い方法です。
curl -s -X POST https://www.hashemian.com/tools/form-post-tester.php \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d @- <<EOF
{
"Variable1":"Value1",
"Variable2":"Value2's",
"Variable3":"Value3",
"Variable4":"$Value4Variable",
"Variable5":"Value5"
}
EOF
@-
カールに標準入力から読み取るように指示し、カール<<EOF
の標準入力に入力するheredocを起動します。 Heredocの良いところは、引用符をエスケープする必要がなく、bash変数を使用できることです。これは引用符をエスケープする方法を心配する必要はなく、内容全体をより読みやすくします。