ubuntuusers.de

im bash script Variable zwischen hochkomma

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

Fohnbit

Anmeldungsdatum:
31. August 2013

Beiträge: 179

Hallo,

ich bekomme folgendes einfach nicht hin: Absenden eines JSON Post mittels curl und ergebnis in einer Variable speichern.

1
RESPONSE=$(curl -X POST -H 'Content-Type: application/json' -d $JSON_STRING $URL | jq -r '.name')

Das problem ist wohl, das die Variable "JSON_STRING" Hochkommas enthält. Also muss ich den Inhalt zwischen zwei ' ' setzen, aber dann nimmt er nimmer den Inhalt der Variable:

1
RESPONSE=$(curl -X POST -H 'Content-Type: application/json' -d '$JSON_STRING' $URL | jq -r '.name')

Wie kann man das lösen?

Danke!

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9717

Wohnort: Münster

Fohnbit schrieb:

[…] die Variable "JSON_STRING" Hochkommas enthält

Ich würde versuchen, z.B. mit sed jedes als Nutzzeichen vorkommende Hochkomma einzeln zu schützen, also "'" durch "\'" zu ersetzen.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11261

Wohnort: München

Doppelte Anführungszeichen erlauben die Variablen-Expansion:

1
RESPONSE=$(curl -X POST -H 'Content-Type: application/json' -d "$JSON_STRING" "$URL" | jq -r '.name')

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13207

Fohnbit schrieb:

1
RESPONSE=$(curl -X POST -H 'Content-Type: application/json' -d $JSON_STRING $URL | jq -r '.name')

Also, das muss erst mal so aussehen:

1
RESPONSE=$(curl -X POST -H 'Content-Type: application/json' -d "$JSON_STRING" "$URL" | jq -r '.name')

Bei "$URL" muss es nicht unbedingt sein - je, nach Zeichen in der URL. Es ist egal, wie viele einfache oder doppelte Anführungszeichen in $JSON_STRING stecken, das wird so korrekt expandiert. Beispiel:

1
2
3
4
5
6
7
8
$ foo='"'
$ args.sh "$foo"
arg count: 1
arg[1]: '"'
$ foo="'"
$ args.sh "$foo"
arg count: 1
arg[1]: '''

Das problem ist wohl, das die Variable "JSON_STRING" Hochkommas enthält. Also muss ich den Inhalt zwischen zwei ' ' setzen,

Nein, Du brauchst lediglich doppelte Anführungszeichen (s.o.).

aber dann nimmt er nimmer den Inhalt der Variable:

Es ist nicht der Inhalt sondern der Name!

1
2
3
$ args.sh '$JSON_STRING'
arg count: 1
arg[1]: '$JSON_STRING'
1
RESPONSE=$(curl -X POST -H 'Content-Type: application/json' -d '$JSON_STRING' $URL | jq -r '.name')

Wie kann man das lösen?

s.o.

Wenn es irgendwo schief geht, dann vielleicht beim Befüllen von $JSON_STRING. Zeige doch mal den Code.

Antworten |