Variablen und Unterausdrücke

Es gibt zwei Arten von auszuwertenden Ausdrücken in Nushell: Variablen und Unterausdrücke. Diese werden durch das Dollar Symbol ($) eingeleitet. Das gibt den Hinweis, dass Nushell an dieser Stelle einen Ausdruck auswerten muss, um einen Wert zu erhalten, der für die Ausführung eines gesamten Befehls benötigt wird. Beide Formen des Ausdrucks haben eine einfache Variante und eine 'Pfad'-Variante, wenn mit komplexeren Daten gearbeitet wird.

Variablen

Die einfachere Variante der auszuwertenden Ausdrücke ist die Variable. Während der Auswertung, wird die Variable durch ihren Wert ersetzt.

Wenn eine Variable erzeugt wurde, kann der Inhalt dieser Variable ausgegeben werden, indem $ vor dem Variablennamen verwendet wird:

> let my-value = 4
> echo $my-value
4

Pfade von Variablen

Ein Pfad einer Variable funktioniert ähnlich wie ein strukturierter Datentyp. Es kann mittels Referenzen auf den Inhalt der Variable beziehungsweise die Spalten in der Variable zugegriffen werden, um final bei einem bestimmten Wert zu landen. Wenn beispielsweise anstatt der 4 im obigen Beispiel, der Variablen eine Tabelle zugewiesen wurde:

> let my-value = [[name]; [testuser]]

Hier kann ein Pfad der Variable $my-value verwendet werden, um den Wert der Spalte name in nur einem Schritt zu bekommen:

> echo $my-value.name
testuser

Unterausdrücke

Unterausdrücke können jederzeit ausgewertet und die Ergebnisse verwendet werden, indem der Ausdruck in Klammern () gepackt wird. Hinweis: In älteren Versionen von Nushell (älter als 0.32) wurde $() benutzt.

Die Klammern enthalten eine Pipeline, die bis zum Ende durchlaufen wird und deren Ergebnis dann verwendet wird. Hier einige Beispiele: (ls) würde den ls Befehl ausführen und die entsprechende Tabelle zurückgeben und (git branch --show-current) führt den externen Befehl git aus und gibt einen String mit dem Namen des aktuellen Branch zurück. Diese Klammern können auch verwendet werden, um mathematische Ausdrücke, wie (2 + 3), auszuwerten.

Unterausdrücke können auch ganze Pipelines statt nur einzelner Befehle enthalten. Um eine Liste von Dateien mit einer Größe größer als 10 Kilobytes zu bekommen, kann die folgende Pipeline verwendet und einer Variable zugewiesen werden:

> let names-of-big-files = (ls | where size > 10kb)
> echo $names-of-big-files
───┬────────────┬──────┬──────────┬──────────────
 # │    name    │ type │   size   │   modified
───┼────────────┼──────┼──────────┼──────────────
 0 │ Cargo.lock │ File │ 155.3 KB │ 17 hours ago
 1 │ README.md  │ File │  15.9 KB │ 17 hours ago
───┴────────────┴──────┴──────────┴──────────────

Unterausdrücke und Pfade

Unterausdrücke unterstützen auch Pfade. Um beispielsweise eine Liste der Dateinamen im aktuellen Ordner zu bekommen, kann diese Pipeline verwendet werden:

> ls | get name

Dasselbe Ergebnis kann auch in nur einem Schritt erreicht werden, indem ein Unterausdruck mit Pfad verwendet wird:

> echo (ls).name

Welcher Stil gewählt wird, hängt vom Anwendungsfall und den persönlichen Vorlieben ab.

Short-hand Unterausdrücke

Nushell erlaubt den Zugriff auf Spalten in Tabellen in Unterausdrücken durch einfache Short-Hands. Wenn beispielsweise nur Zeilen in ls angezeigt werden sollen, in der die Größe der Datei größer als 10 Kilobytes ist, kann der folgende Befehl verwendet werden:

> ls | where size > 10kb

where size > 10kb ist ein Befehl mit zwei Teilen: Dem Befehlsnamen where und dem short-hand Ausdruck size > 10kb. Hier wird auch klar, warum das Ganze short-hand heißt: size ist hier die gekürzte Version von $it.size. Das Ganze könnte auch mit einer der folgenden ausführlicheren Varianten erreicht werden:

> ls | where $it.size > 10kb
> ls | where ($it.size > 10kb)
> ls | where {|$it| $it.size > 10kb }

Damit diese short-hand Syntax funktioniert, muss der Name der Spalte auf der linken Seite der Operation sein (wie bei size in size > 10kb).