ubuntuusers.de

Pipe-Operator, Here-String und Process Substitution

Status: Ungelöst | Ubuntu-Version: Ubuntu MATE 20.04 (Focal Fossa)
Antworten |

CarstenHa

Avatar von CarstenHa

Anmeldungsdatum:
1. Mai 2020

Beiträge: 138

Hallo,

ich brauche mal Eure Hilfe für ein tieferes Verständnis. Welches der folgenden Beispiele hat was für Vor- bzw. Nachteile beim Programmieren:

1
2
3
4
5
6
7
8
# Pipe-Operator
echo "$var" | wc -l 

# Here String
wc -l <<<"$var" 

# Process Substitution
wc -l <(echo "$var") 

Ich habe gelesen, das der Pipe-Operator einen neuen Prozess erzeugt, was der Here-String nicht macht. Gibt es da evtl. Unterschiede in der Performance?

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4452

Wohnort: Göttingen

Naja, das Erzeugen der Subshell braucht schon ein ganz bisschen Zeit. Aber damit der Performance-Unterschied zu merken ist, brauchst Du da schon extreme Beispiele, denke ich. Problem der Subshell (also bei der Pipe) ist häufiger eher, die Definiertheit von Variablen, dass also Variablen, die in der Subshell definiert werden, außerhalb der Subshell nicht bekannt sind.

Du kannst ja mit time einfach nach nachmessen, ob Du Unterschiede in der Laufzeit siehst.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13192

CarstenHa schrieb:

ich brauche mal Eure Hilfe für ein tieferes Verständnis. Welches der folgenden Beispiele hat was für Vor- bzw. Nachteile beim Programmieren:

Zeile 2 funktioniert in jeder POSIX-Shell (also auch der sh), während 5 und 8 Spezialitäten der bash (und vielleicht noch anderer Shells wie der zsh) sind. Vorteil von Zeile 8 ist, dass man damit die Ausgabe mehrerer Pipelines übergeben kann. Ich mache z.B. manchmal so etwas

1
diff -U3 <(ein kommando | sort) <(ein anderes kommando | sort)
1
2
3
4
5
6
7
8
# Pipe-Operator
echo "$var" | wc -l 

# Here String
wc -l <<<"$var" 

# Process Substitution
wc -l <(echo "$var") 

Ich habe gelesen, das der Pipe-Operator einen neuen Prozess erzeugt, was der Here-String nicht macht. Gibt es da evtl. Unterschiede in der Performance?

Für die Process Substitution kannst Du leicht sehen, dass eine Pipe erzeugt wird, wenn Du anstatt wc mal stat einsetzt. Bei stat - <<<"123" sieht man, dass Stdin eine reguläre Datei ist.

Antworten |