lambda-Funktionen in der bash
Ist es eine Art der Umsetzung/Verwendung von lambda-Funktionen in der bash? Ich denke da an so etwas wie:
$ someCommand | xargs -L1 (lambda function)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es eine Art der Umsetzung/Verwendung von lambda-Funktionen in der bash? Ich denke da an so etwas wie:
$ someCommand | xargs -L1 (lambda function)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich kenne keine Möglichkeit, dies zu tun, können Sie jedoch in der Lage sein zu erreichen, was Sie versuchen zu tun, mit:
Diese auch schneller, da Sie nicht erstellen Sie einen neuen Prozess für jede Zeile text.
[BEARBEITEN 2009-07-09]
Ich habe zwei änderungen vorgenommen:
-r
zu deaktivieren backslash Verarbeitung-das bedeutet, dass die backslashes bei der Eingabe wird unverändert weitergeleitet.X
) als parameter anread
lassen wirread
weisen Sie auf Ihre Standard-variableREPLY
. Das hat den angenehmen Nebeneffekt für die Erhaltung der führenden und nachgestellten Leerzeichen, die entfernt werden, sonst (obwohl die inneren Räume sind erhalten).Aus meinen Beobachtungen, zusammen mit diesen änderungen erhalten Sie alles außer wörtliche NUL (ASCII 0) - Zeichen auf jeder Zeile eingeben.
[BEARBEITEN 26/7/2016]
Laut Kommentator Evi1M4chine, Einstellung
$IFS
auf den leeren string, bevor Sie ausgeführtread X
(z.B. mit dem BefehlIFS='' read X
) sollte auch die Beibehaltung von Leerzeichen am Anfang und Ende beim speichern das Ergebnis in$X
, das heißt, Sie sind nicht gezwungen, zu verwenden$REPLY
.'
zitieren speziell. BTW empfehle ichread -r
anstelle der einfachenread
. Das bewahrt Zitate. Wie es gelesen wird, A\B\C richtig. Btw nette Antwort, +1IFS=''
Sie nicht gezwungen sind, verwenden Sie$REPLY
. 🙂wenn Sie wollen true-Funktionen, und nicht nur Rohre oder while-Schleifen (z.B. wenn Sie möchten, übergeben Sie herum, als wären Sie Daten), würde ich einfach nicht tun, lambdas, und definieren dummy-Funktionen mit einer einmaligen dummy-Namen, um direkt benutzen und wegwerfen danach. Etwa so:
Wie in der richtigen funktionalen Sprachen gibt es keine Parameter übergeben, wie Sie können, wickeln Sie Sie in einem Verschluss:
Ich würde behaupten, dass es sogar kürzer als alle anderen Lösungen die hier vorgestellt.
bash
erlaubt die Definition von Funktionen in-line, noch anonym. Aber es ist definitiv erlaubt als Parameter übergeben, sogar in der Schließung der vergangen-Funktion, und deren Namen nur über anonyme. Während also meine Antwort ist ja auch nicht unbedingt eine volle lambda, es ist so nah wie Sie bekommen werde.Was ist das?
nimmt jedes argument ist eine Zeile, sonst ändern Trennzeichen)
wenn Sie möchten, dass nur xargs (aufgrund der parallel
-P N
option zum Beispiel), und nur bash als Funktion code, dannbash -c
können verwendet werden, die als parameter für xargs.tr und 0 option werden hier verwendet, um deaktivieren Sie alle Parameter xargs Substitutionen.
Ja. Man kann übergeben, um eine string-variable, die einen Befehl rufen, und dann den Befehl ausführen mit eval.
Beispiel:
Der eval-trick wurde schon erwähnt, aber hier mein Beispiel für erweiterte bash Verschlüsse:
PS ich habe gerade kam diese für einen völlig anderen Zweck und war gerade auf der Suche von google zu sehen, wenn der sb mit, dass. Ich tatsächlich benötigt, um zu bewerten eine wiederverwendbare Funktion im Kontext (shell) von Haupt-Skript.