Shell-Script Syntax-Problem

  • Sauberer ist bei JSON Strings mit jq zu arbeiten. In Deinem Falle ist es akzeptabel ohne jq. Aber wenn das JSON aus mehr als einem Element besteht sollte man das einen interessierende Element mit jq extrahieren.

    Beispielausgabe von status%2010:

    Wenn Du da Total auslesen willst geht das nur noch mit jq .StatusSNS.ENERGY.Total

    :no_sad: ... Kein raspiBackup - kein Mitleid ... :no_sad:

    Mein Raspberry Zoo

    3 * RPi1B, 2 * RPi3B, 2 * RPI4, 1 * CM4, 1 * RPi5

  • Ich finde das in diesem Fall schon nicht akzeptabel ohne jq zu arbeiten, denn aus JSON-Sicht wäre beispielsweise {"POWER":"ON"} und {"POWER": "ON"} der gleiche Wert, was mit jq funktioniert, mit simplem Zeichenkettenvergleich der Shell aber nicht. Wenn man das mit Zeichenkettenvergleich macht, dann sollte man dringend beide Fälle explizit testen und falls die beide nicht zutreffen, entsprechend einen Fehler melden, damit man schauen kann was da nicht stimmt. Würde ich übrigens auch mit jq so machen, das so zu schreiben, dass man mitbekommt, wenn da etwas unerwartetes zurück kommt.

    “Politiker muss man nicht achten, man muss auf sie achten.” — Dieter Hildebrandt

  • Ich finde das in diesem Fall schon nicht akzeptabel ohne jq zu arbeiten, denn aus JSON-Sicht wäre beispielsweise {"POWER":"ON"} und {"POWER": "ON"} der gleiche Wert, was mit jq funktioniert, mit simplem Zeichenkettenvergleich der Shell aber nicht.

    Solange das immer dasselbe Gerät ist wird sich der String nicht ändern. Aber Du hast natürlich Recht: Gemäß JSON Syntax können auch beliebige Leerzeichen zur Trennung genutzt werden. D.h. wenn man unterschiedliche Geräte ansprechen will, die unterschiedliche JSON Formate ausspucken, geht das nur mit jq oder regex. Letzteres ist aber eine Krücke.

    dass man mitbekommt, wenn da etwas unerwartetes zurück kommt.

    Macht Sinn. Nennt sich defensives Programmieren. Aber ich glaube der TE ist mit der vorgeschlagenen Lösung zufrieden.

    wäre eine mögliche defensive Implementierung

    :no_sad: ... Kein raspiBackup - kein Mitleid ... :no_sad:

    Mein Raspberry Zoo

    3 * RPi1B, 2 * RPi3B, 2 * RPI4, 1 * CM4, 1 * RPi5

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!