2016-08-10 5 views
1

ich eine Locke Befehl bin Ausgabe, die im Idealfall würde wie folgt aussehen (beachten Sie, dass dies wegen des Mangels an Flucht nicht korrekt ist):innerhalb Apostroph

curl -X POST --data-urlencode 'payload={"channel": "@somebody", "text": "I'm sending you a test message. Let me know if you get it."}' https://hooks.slack.com/services/XXX 

Das Apostroph im Wort Ich bin dafür verantwortlich, dass dies fehlschlägt. Ich bin jedoch nicht sicher, wie ich dieses Zitat umgehen kann, da es mehrere Ebenen von verschachtelten Anführungszeichen gibt.

Als eine zweite Frage, was ist, wenn in der Textzeichenfolge doppelte Anführungszeichen stehen? Wie konnten diese entkommen?

Ich habe gelesen, über die Flucht und schaute auf andere SO Beiträge (einschließlich How to escape single-quotes within single-quoted strings?), aber ich kann nicht scheinen, um irgendwelche Lösungen zu arbeiten. Der verlinkte Post spricht von einfachen Anführungszeichen in einfachen Anführungszeichen und löst dieses Problem durch doppelte Anführungszeichen. Mein Anführungszeichen ist jedoch bereits in Anführungszeichen gesetzt. Das ist also komplizierter.

Vielen Dank für Ihre Hilfe.

+1

@ user000001 Ich habe meinen Beitrag bearbeitet, um zu erklären, warum dieser Beitrag mein Problem nicht löst. – Josephus

+0

Verwenden Sie einfach eine Ansc c-Zeichenfolge '$ 'stuff'' und entkommen Sie die einzelnen Anführungszeichen darin. – 123

+0

@Alex: Re die Bearbeitung, es gibt keinen Unterschied. Was Bash betrifft, ist das doppelte Zitat in einfachen Anführungszeichen nur ein anderes Zeichen. Also sollte so etwas funktionieren: 'curl -X POST --data-urlencode 'payload = {" channel ":" @somebody "," text ":" Ich schicke dir eine Testnachricht. Lass es mich wissen wenn du es bekommst. "} 'https: // hooks.slack.com/services/XXX' – user000001

Antwort

3

Ein einfacher Rat: wenn Sie Zweifel haben und keine besonderen Anforderungen, die Sie sowohl einzelne als auch doppelte Anführungszeichen verwenden zwingen, nur die Zitate normalisieren und die inneren zu entkommen:

curl -X POST --data-urlencode "payload={\"channel\": \"@somebody\", \"text\": \"I'm sending you a test message. Let me know if you get it.\"}" https://hooks.slack.com/services/XXX 

Es ist sauberer und intuitiv.

Wenn Sie wirklich wollen, um den Apostroph in doppelten Anführungszeichen zu entkommen:

curl -X POST --data-urlencode 'payload={"channel": "@somebody", "text": "I'\''m sending you a test message. Let me know if you get it."}' https://hooks.slack.com/services/XXX 
3

Ohne Flucht etc. Sie können hier-doc verwenden und es zu Ihrem curl Befehl übergeben:

cat<<-'EOF' | curl -X POST --data-urlencode @- https://hooks.slack.com/services/XXX 
payload={"channel": "@somebody", "text": "I'm sending you a test message. Let me know if you get it."} 
EOF 

Hier @- wird curl lesen Daten von Stdin.