ubuntuusers.de

Variablen in einfach Hochkommas

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

Standard1988

Anmeldungsdatum:
28. Dezember 2010

Beiträge: 87

Hallo Leute,

ich möchte gerne in einem Script in einfach Hochkommas Variablen Definieren, allerdings geht nicht mit curl, wenn ich vor den Hochkommas ein \ setze.

Bei der Option -d erwartet er immer ein '{...}'. In diesem möchte ich gerne Variablen unterbringen, jedoch bekomme ich jedesmal einen Fehler, wenn ich es ohne Hochkommas mache.

Viele Grüße lnix

Hefeweiz3n Team-Icon

Moderator, Webteam
Avatar von Hefeweiz3n

Anmeldungsdatum:
15. Juli 2006

Beiträge: 5814

Wohnort: Ankh-Morpork

Kurze Variante: Funktioniert nicht, du musst doppelte Anführungszeichen benutzen, einfache Hochkommata werden nicht funktionieren.

Lange Erklärung: Die Shell kennt verschiedene Quoting-Mechanismen um Shell-Erweiterung von Variablen oder anderer eingebauter Funktionalität auszuschalten.

Das heißt: Anführungszeichen schalten die meisten Mechanismen aus, das wichtigste was noch funktioniert ist die Variablenerweiterung. Hochkommata schalten alles (auch die Variablenerweiterung) aus, wenn VARIABLE=foobar ist wird ein 'hier ist $VARIABLE' also als wörtliches <hier ist $VARIABLE> gelesen, ein "hier ist $VARIABLE" als <hier ist foobar> erweitert.

Um dir genauer helfen zu können solltest du uns ein komplettes Beispielkommando liefern, so ist das viel raten.

Standard1988

(Themenstarter)

Anmeldungsdatum:
28. Dezember 2010

Beiträge: 87

Doppte Hochkommas funktionieren leider nicht, das ist ja mein Problem:

1
2
3
4
5
6
$ curl -k -X POST -H "X-Cookie: token=$(cat .tokenid)" -H 'Content-Type: application/json' -d "{"uuid":"ab4bacd2-05f6-425c-9d79-3ba3940ad1c24e51e1f403febe40","settings":{"name":"bla","description":"bla","policy_id":"1","text_targets":"bla"}" https://bla | python -m json.tool


{
    "error": "Invalid 'uuid' field: missing"
}

Dies funktioniert:

1
$ curl -k -X POST -H "X-Cookie: token=$(cat .tokenid)" -H 'Content-Type: application/json' -d '{"uuid":"ab4bacd2-05f6-425c-9d79-3ba3940ad1c24e51e1f403febe40","settings":{"name":"bla","description":"bla","policy_id":"1","text_targets":"bla"}' https://bla | python -m json.tool

Habt ihr eine Idee?

Grüße lnix

Hefeweiz3n Team-Icon

Moderator, Webteam
Avatar von Hefeweiz3n

Anmeldungsdatum:
15. Juli 2006

Beiträge: 5814

Wohnort: Ankh-Morpork

Standard1988 schrieb:

Doppte Hochkommas funktionieren leider nicht, das ist ja mein Problem:

...

Dies funktioniert:

1
$ curl -k -X POST -H "X-Cookie: token=$(cat .tokenid)" -H 'Content-Type: application/json' -d '{"uuid":"ab4bacd2-05f6-425c-9d79-3ba3940ad1c24e51e1f403febe40","settings":{"name":"bla","description":"bla","policy_id":"1","text_targets":"bla"}' https://bla | python -m json.tool

Habt ihr eine Idee?

Joa, { und } gehören zu den von " interpretierten Zeichen, da sie, wie auch ( und ), für Variablen benutzt werden (Beispie: ${VAR}). Du bist doch quasi schon fast da, der "Trick" gehört jetzt dazu, zu verstehen, das man den '-Teil auch trennen kann. Also quasi wie folgt:

$ UUID=ab4bacd2-05f6-425c-9d79-3ba3940ad1c24e51e1f403febe40
$ echo '{"uuid":"'$UUID'"}'
{"uuid":"ab4bacd2-05f6-425c-9d79-3ba3940ad1c24e51e1f403febe40"}
Antworten |