Tout d'abord, ne pas utiliser ALL_CAPS_VARNAMES: il est trop facile d'écraser accidentellement un crucial shell variables (CHEMIN de)
Mélanger les guillemets simples et doubles dans les cordes de coquille peut être une corvée. Dans ce cas, je ne l'utiliserais printf
:
bucket_name=testbucket
object_name=testworkflow-2.0.1.jar
target_location=/opt/test/testworkflow-2.0.1.jar
template='{"bucketname":"%s","objectname":"%s","targetlocation":"%s"}'
json_string=$(printf "$template" "$BUCKET_NAME" "$OBJECT_NAME" "$TARGET_LOCATION")
echo "$json_string"
Pour les devoirs, lire attentivement cette page: implications pour la Sécurité de l'oubli de citer une variable bash/POSIX coquilles
Une note sur la création de JSON avec la concaténation de chaîne: il y a des cas limites. Par exemple, si l'un de vos chaînes contiennent des guillemets, vous pouvez cassé JSON:
$ bucket_name='a "string with quotes"'
$ printf '{"bucket":"%s"}\n' "$bucket_name"
{"bucket":"a "string with quotes""}
Faire cela avec plus de sécurité dans bash, nous avons besoin d'échapper à cette chaîne entre guillemets doubles:
$ printf '{"bucket":"%s"}\n' "${bucket_name//\"/\\\"}"
{"bucket":"a \"string with quotes\""}