JSON Lines store one JSON object per output line. Bash can build small JSON-shaped records from controlled values.

Program

Play the script to choose a result value and see one JSON-line record.

result
json_line.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash

result="pass"
name="smoke"
json="{\"name\":\"$name\",\"result\":\"$result\"}"
echo "$json"
#!/usr/bin/env bash

result="fail"
name="smoke"
json="{\"name\":\"$name\",\"result\":\"$result\"}"
echo "$json"
  1. result ← pass

    3result="pass"4name="smoke"
    values this steppassresult
  2. name ← smoke

    3result="pass"4name="smoke"5json="{\"name\":\"$name\",\"result\":\"$result\"}"
    values this stepsmokename
  3. json ← {"name":"smoke","result":"pass"}

    4name="smoke"5json="{\"name\":\"$name\",\"result\":\"$result\"}"6echo "$json"
    values this step{"name":"smoke","result":"pass"}jsonsmokenamepassresult
  4. echo "$json"

    5json="{\"name\":\"$name\",\"result\":\"$result\"}"6echo "$json"
    output{"name":"smoke","result":"pass"}
    values this step{"name":"smoke","result":"pass"}json
  1. result ← fail

    3result="fail"4name="smoke"
    values this stepfailresult
  2. name ← smoke

    3result="fail"4name="smoke"5json="{\"name\":\"$name\",\"result\":\"$result\"}"
    values this stepsmokename
  3. json ← {"name":"smoke","result":"fail"}

    4name="smoke"5json="{\"name\":\"$name\",\"result\":\"$result\"}"6echo "$json"
    values this step{"name":"smoke","result":"fail"}jsonsmokenamefailresult
  4. echo "$json"

    5json="{\"name\":\"$name\",\"result\":\"$result\"}"6echo "$json"
    output{"name":"smoke","result":"fail"}
    values this step{"name":"smoke","result":"fail"}json
JSON line A JSON-line stream writes one JSON object per line.
controlled values Small controlled values avoid shell-escaping problems in this introductory pattern.
machine output Structured output is meant for another program as much as for a human reader.