0
ShellScript内で実行するコマンドのJSON引数をよしなにあつかいたい
2024-04-29
  • gcloudコマンドを実行する例

gcloud pubsubでpublishする際にJSONをメッセージとして渡す場合

val=50
key="score"
date="2024-04-23"

message="{\"val\": $val, \"key\": \"$key\", \"date\": \"$date\"}"

gcloud pubsub topics publish metrics --message="$message" --attribute="source=obsidian-dailynote-metadata"

素直にやるとエスケープする必要があり面倒…

jqを使う方法

jqを通すだけで解決できる

message=$(jq -n \
    --arg val "$val" \
    --arg key "$key" \
    --arg date "$date" \
    '{val: ($val | tonumber), key: $key, date: $date}')
  • jq -nで新しいJSONオブジェクトを作成
  • --argオプションでjqに変数を渡し、JSONオブジェクト内でこれらの変数を使用

ヒアドキュメントを使う方法

ヒアドキュメントでも解決できる

message=$(cat << EOF
{
  "val": $val,
  "key": "$key",
  "date": "$date"
}
EOF
)

ヒアドキュメントで定義されたテキストをcatコマンドで取得しmessageに代入している

覚えておいて損はないはず

0

Profile

swfz
swfz
日々学んだことを残していく
Today I Learned
コード片置き場

Account

RSS

Powered by Pixela
© 2024. swfz