Richtig mit curl --data-urlencode bei der übergabe einer variable

Ich versuche meinen code zu optimieren und ein bestimmtes Stück code ist geliehen. Ich möchte zum entfernen der sed, also bin ich nicht mit allen externen Prozessen in meine main-Schleife.

function sendMsg () {
value=$(echo $1 | sed 's//%20/g;s/!/%21/g;s/"/%22/g;s/#/%23/g;s/\&/%26/g;s/'\''/%28/g;s/(/%28/g;s/)/%29/g;s/:/%3A/g;s/\//%2F/g');
str="http://www.xxxx.com/api.ashx?v=1&k=$Key&a=send&w=$value";
curl -s $str;
}

Habe ich bearbeitet diese für Klarheit. Der $Wert ist, einfach zu konvertieren, um eine korrekte url für die Ausgabe über den curl-Befehl am Ende der Funktion.

Das funktioniert zwar ganz gut, meistens bin ich daran interessiert, diese so schnell wie möglich, ohne Verzweigung zu außerhalb verarbeitet, wenn ich kann.

Danke für die Kommentare so weit!!!

Wo ich bin, so weit ist diese:

function sendMsg () {
str="http://www.xxxx.com/api.ashx?v=1&k=$Key&a=send&w=";
curl -s $str --data-urlencode "$1";
}

Bin ich auf dem richtigen Weg mindestens?

  • Ja, es wäre schneller in der bash. Obwohl bash-die Sprache ist langsam, beginnend einen Teilprozess, die Lektüre seiner Ausgabe, und wait()ing für es zu beenden ist viel, viel langsamer als ein paar Dutzend parameter-Erweiterungen.
  • ...ein microbenchmark (dabei entweder Ansatz in einer Schleife) wäre die umfassende Möglichkeit zur Beantwortung dieser, weißte.
  • ...das heißt, wenn Ihr Ziel ist es, die Umsetzung richtige escaping von beliebigen Daten, die für die Bildung der URLs, würde ich argumentieren, dass die Richtige Antwort ist nicht sed oder parameter-Erweiterungen, sondern auch, um eine kanonische Implementierung andere Menschen haben getestet, für Jahre in kniffligen Sonderfällen-wie z.B. in Python urllib.quote().
  • Vielen Dank für die Klarstellung das Thema. Wären Sie in der Lage zu starten mich aus, wie um diese Situation zu bewältigen?
  • ...btw, echo "$1" unterscheidet sich von echo $1 -- letzteres beispielsweise, ersetzen * (wenn auf Ihrer eigenen oder durch Leerzeichen getrennt werden) mit einer Liste der Dateien im aktuellen Verzeichnis; ersetzen Sie läuft von whitespaces (oder andere whitespace-Zeichen wie Zeilenumbrüche) durch ein einzelnes Leerzeichen, und sonst zerfleischen Sie Ihre Daten.
  • Ja, der code ist Folgendes zu formatieren $1-a $ - Wert für das senden aus, um eine curl-Prozess
  • in welchem konkreten Zusammenhang? curl oft url-encoding für Sie, so ist es oft unnötig, es selbst zu tun ersten. Natürlich, wenn Sie nicht mit dem korrekten zitieren beim Aufruf von curl, shell-string-splitting Effekte können verursachen Fehler, die Aussehen wie Sie sind, verursacht wird (oder fest) durch urlencoding Inhalt.
  • Sollten Sie als --data-urlencode.
  • Versucht der curl-route, wenn jemand hätte nichts dagegen, an meinem bearbeiteten Frage.
  • Ihre Frage ist schon völlig anders als die Vorherige. Ich denke, du solltest einfach akzeptiert, die Antwort, dass es fest und erstellt eine andere Frage.
  • Ich bin sehr neu in diesem, und hatte eine 'falsche' Frage von Anfang an. Ich entschuldige mich, wenn ich etwas aus der norm für die regelmäßigen Nutzer hier. Dank einiger Kommentare von @Charles Duffy, führte er mich zu der Frage, die richtige Frage, die ich brauchte Hilfe. Ist die Verfeinerung Ihrer Frage, was Sie eigentlich brauchen, um erreichen nicht dazu ermutigt hier? Ich bin ein wenig verwirrt, sorry.
  • Vollständig ersetzen Sie Ihre Frage (im Gegensatz zu verfeinern es), nachdem diese bereits beantwortet ist eine schlechte Praxis. Bitte Rollback der änderungen und Fragen die neue Frage separat.
  • ...übrigens, nebenbei-die function keyword ist etwas fragwürdige Praxis, da Sie Ihre scripts nicht kompatibel mit POSIX-sh ohne nutzen über die POSIX-Funktion Deklaration syntax: myFunc() {

InformationsquelleAutor yab | 2014-08-12
Schreibe einen Kommentar