私はテキスト文字列をサーバーに送信するカールコマンドを持っていて、ファイルまたはbash変数からそのテキスト文字列を取得する方法を見つけようとしました。コマンドは次のとおりです。
curl -X POST -u "apikey:<apikey>"
--header "Content-Type: application/json"
--data '{"text": "<variable>"}'
"<url>"
そこに変数を取得する方法がわかりません。 $variableと$(< file)に置き換えようとしましたが、エコーなしでテキストを吐き出す方法がわからず、カールでエコーできませんでした。
答え1
答え2
ここで解決策をもう1つ提案すると、次のようになります。
curl -X POST -u "apikey:${apikey}"
--header "Content-Type: application/json"
--data "{\"text\": \"${variable}\"}"
"${url}"
デフォルトでは、"
次の文字列を一緒に処理するために使用される引用符であり、\"
引用符をエスケープ${varname}
する変数です。
答え3
私は使い方ですここのドキュメントカールで使用するJSONをビルドする場合:
curl -s -X POST $URL -d@- <<EOF
[
{
"id": 101,
"text": "$variable"
}
]
EOF
答え4
ランダムな文字列を含むJSONドキュメントを生成するとします。この文字列は正しく引用され、JSONでエンコードする必要があります(さまざまな文字はJSON文字列ではリテラルとして受け入れられず、エスケープまたはエンコードで置き換える必要があります)。最も簡単な方法は、jq
次のJSON認識ツールを使用することですjo
。
使用(非文字列値の場合は、コマンドラインでjq
指定された各キーと値のペアを使用してオブジェクトを作成します):--arg key value
--argjson key value
jq -nc --arg text "$variable" '$ARGS.named'
使用(これは、キーと値がコマンドラインで --区切りペアjo
で提供されるオブジェクトを生成します=
。jo
jo text="$variable"
上記の2つのコマンドのいずれかを使用して、生成されたJSONドキュメントを次のようにパイプラインに公開できます。
json-generating-command |
curl --silent --show-error \
--user "apikey:$apikey" \
--json @- "$url"