- 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に代入している
覚えておいて損はないはず


