シェルスクリプトは、CURL呼び出しの応答ペイロードを返すときにエスケープ文字を省略します。

シェルスクリプトは、CURL呼び出しの応答ペイロードを返すときにエスケープ文字を省略します。

\などのシンボルのエンコードされた値を返すため、文字を含むURL値を含むレスポンスJSONペイロードを返すcur呼び出しを作成するシェルスクリプトがあります=。ところで応答のエコーが除去されています\。その役割も得る方法はありますか?

シェルスクリプト:

curl -k -w "\n%{http_code}" -S -s -X GET \
            -H "Accept: application/json" \
            -u "<<Auth>>" \
"https://<<url>>" | {
    read body
    read code
    
    if [ "x$code" = "x200" ]
    then
      echo "$body" 
    else
      echo "ERROR:$code:$body"
    fi
}

答えはこんな感じです。

{"param1":"val1","param2":{"p1":"v1","p2":"v2", "URL":"<<someString>>//<<host>>:<<port>>;extenstionu003dValue"}}

実際、URL値の最後の部分はですが、エンコードされたextension=value値を返すときはを返す必要があります\u003d。殻が切れています\。誰かが\返信にこの内容を含める方法を提案できますか?

答え1

問題は、シェルの組み込みread機能がこれを\エスケープ文字として扱うことです(ただし\u特別な意味がないためリテラルになるu)。

$ printf '%s\n' 'extension\u003dvalue' | { read body; echo "$body"; }
extensionu003dvalue

次のオプションを使用してバックスラッシュ処理をオフにできます-r

$ printf '%s\n' 'extension\u003dvalue' | { read -r body; echo "$body"; }
extension\u003dvalue

関連情報