Es ist ein Einzeiler, mit bash process substitution.
Die Ausgabe ist auch ein One-Liner, und Sie können bash Arrays nutzen, wenn Sie möchten. Hier ist ein echtes Beispiel:
$ read -a arr < <(wc /etc/passwd);
$ declare -p arr
declare -a arr=([0]="96" [1]="265" [2]="5925" [3]="/etc/passwd")
$ unset arr[3]
$ printf 'lines: %d\nwords: %d\nbytes: %d\n' "${arr[@]}"
lines: 96
words: 265
bytes: 5925
ähnliche Ergebnisse in POSIX-Shell könnten unter Verwendung eine temporäre Datei erreicht werden:
$ tmp=$(mktemp /tmp/foo.XXXX)
$ wc /etc/passwd > $tmp
$ read lines words bytes filename < $tmp
$ rm $tmp
$ printf 'lines: %d\nwords: %d\nbytes: %d\n' "$lines" "$words" "$bytes"
lines: 96
words: 265
bytes: 5925
Oder Sie können die Daten als hier-doc ohne die temporäre Datei holen:
$ read lines words bytes filename <<EOT
> $(wc /etc/passwd)
> EOT
(Offensichtlich würden Sie die interaktiven Eingabeaufforderungen Streifen, wenn Sie das Skript sind.)
Beachten Sie, dass printf
für die Ausgabe über echo
empfohlen wird, da es für verschiedene Betriebssysteme und Shells konsistent ist. This excellent post erläutert einige Überlegungen.
einfach am Anfang des Skripts Zeilen hinzufügen, die notwendige Werte zählen und sie ausdrucken. oder Wrapper vorbereiten, der den Skriptnamen als Parameter erhält, dann zählt er diese Werte, druckt diese Werte und führt dann das Skript aus – darvark
Warum zeigst du uns nicht, was du versucht hast, das Ergebnis und das Ergebnis, das du gesucht hast zum? Es ist sehr schwer zu empfehlen, wie Sie Ihren Code reparieren können, wenn Ihr Code nicht in Ihrer Frage enthalten ist. – ghoti