web-dev-qa-db-ja.com

curlコマンドでbashスクリプトを使用してブール値を設定する方法

変数にtrue/false値を設定し、curlコマンドでjsonに送信する必要があります。

name=$1
sx=$2

`curl -d '{"name":"'"$name"'", "sex":true}' -H "Content-Type: application/json" -X POST http://localhost:8080/setacc`

変数sxは値maleまたはfemaleを受け入れますsex変数に適切なブール値を設定する方法は?

2

JSON文字列全体に変数を使用して部分的に構築することで、全体のコードがより冗長になっても、引用を扱いにくくし、curlコマンドラインを読みやすく、保守しやすくすることができます。

文字列の構築は、文字列の自己連結演算子+=を使用してここで行われます。たとえば、json_string+=$nameでは、Word分割が実行されず、右側に特殊文字が存在しないため、引用符は不要です。

連想配列を使用して、提供されたキーに基づいて必要な値を検索できます。ここでは、ペアを個別に割り当てています。以下に、1つの割り当てでそれらを行う方法を示します。

name=$1
sx=$2

declare -A sexes
sexes[male]=false
sexes[female]=true

json_string='{"name":"'
json_string+=$name
json_string+='", "sex":'
json_string+=${sexes[$sx]}
json_string+='}'

curl -d "$json_string" " -H "Content-Type: application/json" -X POST http://localhost:8080/setacc

JSONをさらに分割して、コード内でもう少し構造的に見えるようにすることができます(結果の文字列の内容はまだ1行の文字列です)。理想的には、これよりも複雑なJSONを使用している場合、専用のJSONツールを使用して構造を構築する必要があります。

連想配列の宣言と割り当てを一度に行う方法は次のとおりです。最初の例は1行で、2行目は複数行です。これも読みやすさと保守性を向上させるためです。

declare -A sexes='([female]="true" [male]="false")'

declare -A sexes='(
    [female]="true"
    [male]="false"
)'
2

文字列maletrueまたはfalse(ニーズに応じて)とfemaleのいずれかに他の値にマッピングする最も簡単な方法は、単純なif…then…else句です。 。秘Theはクォートですが、$name変数で既に得ています。そう:

if [ "$sx" = "male" ]; then
    sex="true";     # or whatever you consider male sex to be
else
    sex="false";    # just the opposite, see above
fi

curl -d '{"name":"'"$name"'", "sex":'$sex'}' -H "Content-Type: application/json" -X POST http://localhost:8080/setacc
4
PerlDuck

あなたの場合、jsonを使用し、テキスト「true」とテキスト「false」を使用できます。

Bashスクリプトロジックに追加する必要があります。

sex="false"
if [ "$sx" = "male" ]; then
  sex="true"
fi

次に、... {"name":"'"$name"'", "sex":\"$sex\"} ...または... {"name":"'"$name"'", "sex":$sex} ...を指定してcurlコマンドを実行します

テストスクリプト:

#!/bin/bash

sx="male"

sex="false"
if [ "$sx" = "male" ]; then
  sex="true"
fi

echo \"$sex\"
3
mature