bash エスケープ引用符

bash エスケープ引用符

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変数を使用できることです。これは引用符をエスケープする方法を心配する必要はなく、内容全体をより読みやすくします。

おすすめ記事