2017-09-27 4 views
3

Ich würde curl Anfrage mit mehreren headers.The Lösung um diesen Befehl zu machen wäre machen, wie:Mit einer bash Variable mehrere Header passieren Befehl kräuseln

curl -H "keyheader: value" -H "2ndkeyheader: 2ndvalue" ... 

Mein Ziel ist es nur eine Variable zu verwenden, mit alle Header wie:

headers='-H "keyheader: value" -H "2ndkeyheader: 2ndvalue" ' 
curl $headers 

curl -H "keyheader: value" -H "2ndkeyheader: 2ndvalue" 

Derzeit senden t er Problem ist: Ich habe meine Zeichenfolge deklarieren können ' oder ", aber bash versucht zu laufen, was nach "-H" ist als Argumente und antwortet dann:

command unknown 

Wollen Sie wissen, was hier schief geht.

Antwort

3

Sie müssen nur ein Array und nicht eine Variable verwenden, um die in Anführungszeichen gesetzten Strings zu übergeben.

declare -a curlArgs=('-H' "keyheader: value" '-H' "2ndkeyheader: 2ndvalue") 

und nun vollständig auf diese Weise dieses Array Durchlauf, die Array-Erweiterung (mit Anführungszeichen) kümmert sich um die Argumente in doppelten Anführungszeichen nicht gespalten werden, während übergeben.

curl "${curlArgs[@]}" 

Weiteren Einblick, warum versagen die args in Ihren Variablen setzen, siehe BashFAQ/050 - I'm trying to put a command in a variable, but the complex cases always fail!

+0

DANKE! Ein praktisches Beispiel dafür zu finden war VIEL härter als es hätte sein sollen. – Tom