Bitdoze-Logo

Fish Shell vs. Bash vs. Zsh – Der große Vergleich 2026

Fish Shell vs. Bash vs. Zsh im Vergleich für 2026: Syntax, Performance, Plugins, Scripting und tägliche Usability – damit du die beste Linux-Shell für dein Setup wählst.

Dragos

Aktualisiert Veröffentlicht 15 Min. Lesezeit

Fish Shell, Bash und Zsh im Vergleich, dargestellt als drei Terminal-Fenster mit unterschiedlichen Shell-Prompts

Hinweis: Dieser Vergleich enthält Empfehlungslinks. Wenn du darüber kaufst, erhalte ich möglicherweise eine Provision – ohne zusätzliche Kosten für dich.

Ich habe alle drei dieser Shells für echte Arbeit genutzt. Bash war jahrelang mein Default, einfach weil es da war. Ich bin zu Zsh gewechselt, als Oh My Zsh durch die Decke ging, und bin lange dabei geblieben. Dann habe ich Fish aus einer Laune heraus probiert – und es wurde mein Daily Driver. Jede Shell hat eine Persönlichkeit, und die beste Linux-Shell für dich hängt davon ab, was dir wichtig ist.

Dieser Fish-vs.-Bash-vs.-Zsh-Vergleich ist nicht theoretisch. Ich gehe durch das, was zählt, wenn du dich jeden Tag hinsetzt und Befehle tippst – Syntax, Autocomplete, Performance, Plugins und die Stolperfallen, die dich beim Wechsel beißen.

Fish vs. Bash vs. Zsh im Überblick (2026)

Feature Fish Bash Zsh
Neuestes Stable 4.9.3 (Sep 2026) 5.3 (Jul 2025) 5.9 (Mai 2022)
Autosuggestions Eingebaut Nein (braucht ble.sh) Plugin (zsh-autosuggestions)
Syntax-Highlighting Eingebaut Nein Plugin (zsh-syntax-highlighting)
Tab-Completions Reichhaltig, out of the box Basis Gut mit Plugins
POSIX-kompatibel Nein Ja Größtenteils ja
Scripting-Syntax Eigene POSIX sh Größtenteils POSIX + Erweiterungen
Config-Datei ~/.config/fish/config.fish ~/.bashrc ~/.zshrc
Standard auf Linux Nein Meistens ja Nein (Standard auf macOS)
Geschrieben in Rust (seit 4.0) C C
Webbasierte Config Ja (fish_config) Nein Nein
Plugin-Manager Fisher, Oh My Fish (unmaintained) Keiner eingebaut Oh My Zsh, Antigen, zinit

Zsh wird als Standard-Shell auf macOS ausgeliefert. Wenn du dort stattdessen Fish willst, musst du Fish Shell auf macOS einrichten – separat. Die Zeile “Neuestes Stable” verdient einen langen Blick: Fish hat allein 2026 sechs Feature-Releases ausgeliefert, während Zsh seit 2022 kein Stable-Release mehr veröffentlicht hat.

Autosuggestions und Completions

Hier zieht Fish sofort davon. Öffne eine frische Fish-Installation, fang an zu tippen, und du bekommst ausgegraute Vorschläge aus deinem Befehlsverlauf. Drücke die Pfeiltaste rechts zum Akzeptieren. Keine Config, keine Plugins, nichts einzurichten. Ich habe einen vollständigen Guide zu Fish-Shell-Autocomplete und -Suggestions geschrieben, der alles abdeckt, was dieses System kann.

Bash hat nichts Vergleichbares out of the box. Du kannst ble.sh installieren (wird noch aktiv entwickelt, auch wenn das letzte getaggte Release alt ist – du installierst vom Git-Master) oder fzf für Fuzzy-History-Suche nutzen, aber das kostet Aufwand.

Zsh kommt mit zsh-autosuggestions hin, aber du musst es selbst installieren. Ich habe einen Guide geschrieben, wie man Command-Autocomplete in Zsh aktiviert, falls du diesen Weg gehst.

Fish parsed außerdem Man-Pages, um Completions automatisch zu generieren. Tippe git und drücke Tab, und du bekommst Completions für Subcommands, Flags und Branch-Namen ohne jede Extra-Konfiguration. Zsh kann das mit dem richtigen Setup (compinit plus Plugins) erreichen, aber es kostet Arbeit. Bashs Tab-Completion ist dagegen rudimentär.

Seit Fish 4.9.0 können Abkürzungen auch Beschreibungen im Completion-Pager anzeigen – eine kleine Quality-of-Life-Verbesserung, die seit Jahren angefragt wurde. Wenn du dir Abkürzungen noch nicht angeschaut hast, sieh dir Fish-Shell-Abkürzungen vs. Aliase an, um zu wissen, wann du was nutzt.

Syntax-Highlighting

Fish hebt deine Befehle hervor, während du tippst. Gültige Befehle bekommen eine Farbe, ungültige sind rot, Strings bekommen ihre eigene. Du erkennst Tippfehler, bevor du Enter drückst. Ich habe einen detaillierten Guide zu Fish-Shell-Syntax-Highlighting, wenn du sehen willst, wie es unter der Haube funktioniert.

Zsh braucht zsh-syntax-highlighting für dasselbe Verhalten. Ich habe über das Aktivieren von Syntax-Highlighting in Zsh geschrieben, falls du das willst.

Bash hat überhaupt kein eingebautes Syntax-Highlighting.

Scripting und POSIX-Kompatibilität

Ältere Artikel (einschließlich der vorherigen Version dieses hier) bringen die Fakten zur Fish-vs.-Bash-Kompatibilität durcheinander.

Fish hat eine eigene Scripting-Syntax, die absichtlich nicht POSIX-kompatibel ist. Die Fish-Entwickler haben sich so entschieden, um eine sauberere Sprache zu bekommen. Die Syntax ist leichter zu lesen:

Fish-Syntax

fish
# Fish - cleaner syntax
if test -f ~/.config/fish/local.fish
    source ~/.config/fish/local.fish
end

for file in *.txt
    echo $file
end

# Variables
set greeting "hello"
echo $greeting

Bash-Syntax

bash
# Bash - POSIX style
if [ -f ~/.bashrc_local ]; then
    source ~/.bashrc_local
fi

for file in *.txt; do
    echo "$file"
done

# Variables
greeting="hello"
echo "$greeting"

Nun ist die Copy-Paste-Lücke viel kleiner als früher. Fish unterstützt &&, || und $(command) seit Jahren (&&/|| seit Fish 3.0 in 2018, $() seit 3.4 in 2022), sodass die meisten modernen Einzeiler problemlos einfügbar sind. Fish 4.6.0 hat sogar |& als Bash-kompatible Schreibweise für &| hinzugefügt. Hier ist, was funktioniert und was nicht:

fish
# All of these work in Fish today:
git pull && git push          # && since fish 3.0 (2018)
echo (date)                   # fish-native substitution
echo $(date)                  # $() since fish 3.4 (2022)
some-command |& less          # |& alias for &| since fish 4.6.0 (2026)

# Still different from Bash:
env FOO=bar some-command      # instead of FOO=bar some-command
set -gx FOO bar               # instead of export FOO=bar
echo $status                  # instead of $?
test -f /tmp/x && echo ok     # no [[ ]] - use test or [

Was immer noch bricht, wenn du Bash in Fish einfügst:

  • Inline-Umgebungsvariablen: FOO=bar command funktioniert nicht. Nutze env FOO=bar command oder set -x FOO bar.
  • export FOO=bar wird zu set -gx FOO bar.
  • $? ist in Fish $status.
  • [[ ]]-Tests existieren nicht. Nutze test oder [.

Bash steht auch nicht still. Bash 5.3 erschien im Juli 2025 mit einer neuen fork-losen Command Substitution (${| command; }) und einer GLOBSORT-Variable zum Sortieren von Glob-Ergebnissen. Es wird aktiv gepflegt – es liefert nur nicht die interaktiven UX-Features (Autosuggestions, Syntax-Highlighting), die Fish eingebaut hat und Zsh über Plugins bekommt.

In der Praxis zählt der Scripting-Unterschied weniger, als du denkst. Meistens führst du Befehle aus, statt Shell-Scripts zu schreiben. Und wenn du doch ein Shell-Script brauchst, schreibe #!/bin/bash in die erste Zeile und führe es aus Fish heraus als Bash-Script aus. Für Fish-spezifische eigene Befehle schau dir meinen Guide zu Fish-Shell-Funktionen an.

Tipp zur POSIX-Kompatibilität

Du kannst jedes Bash-Script aus Fish ausführen. Nutze einfach bash script.sh oder mache das Script mit einem #!/bin/bash-Shebang ausführbar. Fishs Nicht-POSIX-Syntax betrifft nur, was du interaktiv tippst, und Fish-spezifische Scripts.

Konfiguration

Fish speichert seine Config in ~/.config/fish/config.fish und unterstützt ein conf.d/-Verzeichnis für modulare Config-Dateien. Es gibt außerdem ein webbasiertes Konfigurations-Tool: Führe fish_config aus und ein Browser öffnet sich, in dem du Farben ändern, Funktionen ansehen und Variablen setzen kannst. Klingt gimmicky, ist aber nützlich, um Farb-Themes schnell in der Vorschau zu sehen.

Seit 4.7.0 wendet Fish das Default-Theme in nicht-interaktiven Shells nicht mehr an – deine Script-Ausgabe bleibt also sauber. Kleines Detail, aber es beseitigt eine häufige “warum ist meine Script-Ausgabe bunt”-Überraschung.

Bash nutzt ~/.bashrc (und manchmal ~/.bash_profile). Alles ist manuelles Editieren.

Zsh nutzt ~/.zshrc. Mit installiertem Oh My Zsh bekommst du ein Framework, das Plugins und Themes verwaltet, aber die Config-Datei kann lang werden. Ich habe einige der besten Oh-My-Zsh-Plugins vorgestellt, falls du Team Zsh bist.

Performance und Release-Kadenz 2026

Fish 4.0 wurde von C++ nach Rust umgeschrieben und im Februar 2025 veröffentlicht. Stand November 2026 ist das neueste Stable 4.9.3 (September 2026). Fish hat 2026 ungefähr quartalsweise Feature-Releases ausgeliefert – 4.5, 4.6, 4.7, 4.8 und 4.9 – plus schnelle Patch-Releases. Seit 4.5.0 liest Fish terminfo überhaupt nicht mehr und hat die ncurses/terminfo-Abhängigkeit komplett abgelegt.

So vergleichen sich die Release-Zeitlinien:

Fish Shell vs. Bash vs. Zsh Release-Zeitlinie 2022 bis 2026

Zsh 5.9 (Mai 2022) ist immer noch das neueste Stable-Release – über vier Jahre ohne neue Stable-Version. Bash 5.3 erschien im Juli 2025, Bash ist also auch nicht eingefroren, bewegt sich aber klar in einer langsameren Kadenz als Fish.

Zur rohen Geschwindigkeit: Der Fish-Start fühlt sich auf meinen Maschinen sofort an. Es ist etwas schwerer als eine nackte Bash-Shell, aber der Unterschied wird in Millisekunden gemessen und ist nicht spürbar. Zsh mit geladenem Oh My Zsh und mehreren Plugins kann spürbar langsam starten, manchmal über eine Sekunde. Es gibt Workarounds (Lazy Loading, leichtere Plugin-Manager wie zinit), aber das musst du aktiv managen. Nacktes Bash startet am schnellsten, weil es am minimalsten ist.

Für interaktive Nutzung fühlt sich Fish am flüssigsten an, weil Autosuggestions und Completions sofort funktionieren. Die Performance, die bei einer Shell am meisten zählt, ist, wie schnell sie antwortet, während du tippst – und da gewinnt Fish.

Das sind Alltagseindrücke, keine Benchmark-Zahlen. Ich habe keine rigorosen Shell-Startup-Benchmarks laufen lassen, und je nach Config und Plugins wirst du wild unterschiedliche Zahlen finden.

Fish 4.7 und 4.8 haben außerdem langjährige Verlaufs-Zuverlässigkeitsprobleme behoben: NUL-Byte-Korruption, wenn die Shell SIGTERM/SIGHUP bekam (#10300), und Verlaufssuche über parallele Sessions hinweg. Wenn du mehrere tmux-Panes oder SSH-Sessions betreibst und dir dein Shell-Verlauf wichtig ist, zählt das. Zum Verwalten mehrerer Terminal-Sessions siehe meinen Guide zu den besten Terminal-Multiplexern.

Plugin-Ökosysteme

Fish hat zwei Haupt-Plugin-Manager:

  • Fisher – leichtgewichtig, schnell, null Config. Etwa 9,500 Stars Stand November 2026. fisher install author/plugin ausführen und fertig.
  • Oh My Fish – ein Framework ähnlich wie Oh My Zsh. Seine README beginnt immer noch mit einer Warnung, dass es seit Jahren unmaintained ist. Ich würde für neue Setups zu Fisher greifen, aber wenn du neugierig bist, habe ich einen Guide zum Installieren und Nutzen von Oh My Fish.

Ich gehe in Beste Fish-Shell-Plugins und -Tools deutlich mehr ins Detail.

Zsh hat dank Oh My Zsh das größte Plugin-Ökosystem mit ungefähr 370 Plugins und 140 Themes (echte Repo-Zahlen Stand November 2026). Oh My Zsh selbst hat über 190,000 GitHub-Stars. Antigen, zinit und zplug sind alternative Plugin-Manager mit unterschiedlichen Performance-Profilen.

Für geteilten Verlauf über Shells hinweg ist Atuin zum Standard-Tool geworden (etwa 32,000 Stars Stand November 2026). Es funktioniert über Fish, Zsh und Bash hinweg und synchronisiert deinen Verlauf mit einer Suche, die besser ist als Ctrl+R. Wenn du verstehen willst, wie Fish Verlauf nativ handhabt, sieh dir an, wie Fish-Shell-Verlaufssuche und -Persistenz funktionieren.

Bash hat kein echtes Plugin-Ökosystem. Es gibt Dotfile-Frameworks wie bash-it, aber die Adoption ist viel kleiner.

Lernkurve

Bash: Du kennst es (vermutlich) schon. Es ist überall, und die meisten Linux-Tutorials setzen es voraus. Wenn du eine Auffrischung der wichtigsten Linux-Befehle brauchst – die funktionieren in jeder Shell gleich; nur das Shell-Plumbing (Variablen, Substitution, Tests) unterscheidet sich.

Zsh: Fast keine Lernkurve von Bash kommend. Die Syntax ist nahezu identisch, und Oh My Zsh bietet ein geführtes Erlebnis. Es ist im Kern Bash mit Extras.

Fish: Es gibt eine kleine Eingewöhnungszeit. Die Syntax-Unterschiede bringen dich die ersten ein, zwei Tage ins Stolpern, besonders bei Variablen-Zuweisung (set statt =) und Command Substitution. Danach bedeuten die eingebauten Features, dass du insgesamt weniger lernen musst, weil du weniger konfigurieren musst.

Welche Shell wann im Jahr 2026

Hier mein Entscheidungsfluss für die Wahl der besten Linux-Shell 2026:

Shell-Wahl-Entscheidungsfluss: portable Scripts zu Bash, Zero-Config-UX zu Fish, OMZ-Ökosystem zu Zsh

Nimm Fish, wenn du eine Shell willst, die out of the box gut funktioniert, du nicht oft POSIX-Shell-Scripts schreibst und du Autosuggestions und Syntax-Highlighting ohne Konfiguration schätzt. Fishs Momentum 2026 (sechs Feature-Releases, ein stabiles Rust-Rewrite) macht es zu einer soliden Wahl. Wenn das nach dir klingt, schau dir an, wie du Fish Shell auf Ubuntu installierst, um zu starten.

Nimm Zsh, wenn du Bash-kompatible Syntax mit modernen Features via Plugins willst. Du bist comfortable damit, Dinge zu konfigurieren. Oh My Zsh gibt dir eine große Community und tonnenweise Themes, auch wenn die Release-Kadenz nachgelassen hat.

Nimm Bash, wenn du Shell-Scripts schreibst, die überall laufen müssen, du auf Servern arbeitest, wo Bash die einzige verfügbare Shell ist, oder du maximale POSIX-Kompatibilität bevorzugst. Bash 5.3 wird aktiv gepflegt – es jagt nur keine interaktiven UX-Features.

Alle drei Shells sind kostenlos. Die Kosten stecken in der Konsistenz. Nutze Fish dort, wo du die Umgebung kontrollierst (Workstation, dotfiles-verwalteter VPS), und Bash überall sonst (Rescue-Shells, minimale Container, CI-Runner). Halte Automatisierungs-Scripts unabhängig von deiner Login-Shell als #!/bin/bash.

Fish Shell auf Ubuntu installieren

Distro-Pakete hinken hinterher: aktuelles Fish auf einem VPS

Fish liefert quartalsweise, aber Distro-Pakete hinken gewaltig hinterher. Das ist eine echte Stolperfalle, wenn du einer “einfach apt install fish”-Anleitung folgst:

  • Debian 13 “trixie” (stable) liefert fish 4.0.2 – neun Feature-Releases hinter 4.9.3.
  • Ubuntu 24.04 LTS liefert fish 3.7.0, den alten C++-Build vor Rust.

Verlasse dich auf einem VPS nicht auf apt install fish für aktuelles Fish. Nutze stattdessen die Standalone-Binary. Wenn du eine günstige Dev-Box willst, auf der du die Shell-Umgebung kontrollierst, kostet ein Hetzner-Cloud-VPS ein paar Euro im Monat und gibt dir vollen Root-Zugang.

Hier der Standalone-Installationspfad:

bash
# 1. Download the standalone binary (x86_64 example)
#    Get the exact URL from https://github.com/fish-shell/fish-shell/releases
wget https://github.com/fish-shell/fish-shell/releases/download/4.9.3/fish-4.9.3-linux-x86_64.tar.xz

# 2. Extract and install
tar -xJf fish-4.9.3-linux-x86_64.tar.xz
sudo cp fish-4.9.3-linux-x86_64/bin/* /usr/local/bin/

# 3. Register the shell (required before chsh)
echo /usr/local/bin/fish | sudo tee -a /etc/shells

# 4. Set as login shell
chsh -s /usr/local/bin/fish

Installation verifizieren:

bash
fish --version
# Expected: fish, version 4.9.3

grep fish /etc/shells
# Expected: /usr/local/bin/fish

Server bleiben auf Bash

Deine Login-Shell und deine Script-Shell sind verschiedene Dinge. chsh betrifft nur interaktive Logins. Halte Scripts unabhängig von deiner Login-Shell als #!/bin/bash. Interaktives Fish auf deiner Workstation oder einem dotfiles-verwalteten VPS ist okay – Server, auf die du dich für Admin-Arbeit per SSH verbindest, sollten auf Bash bleiben. Falls du es je rückgängig machen musst: chsh -s /bin/bash stellt die Login-Shell wieder her, und rm /usr/local/bin/fish* entfernt die Standalone-Installation.

Wenn du auf Ubuntu bist und einen einfacheren Weg willst, der aktuell bleibt, behandelt der Guide aktuelle Fish Shell auf Ubuntu installieren den PPA-Weg.

Häufige Installationsfehler

chsh: /usr/local/bin/fish is not in /etc/shells Die Standalone-Binary ist nicht registriert. Fix: echo /usr/local/bin/fish | sudo tee -a /etc/shells, dann chsh erneut versuchen.

Bauen aus dem GitHub-Source-Tarball schlägt fehl Das auto-generierte “Source code (tar.gz)” von GitHub lässt sich nicht bauen. Nutze stattdessen den offiziellen fish-4.9.3.tar.xz-Source-Tarball aus den Release-Assets – dort ist das Build-System vorkonfiguriert.

apt install fish liefert eine uralte Version Erwartbar. Debian Stable und Ubuntu LTS hinken Monate hinterher. Nutze die Standalone-Binary oder das fish-shell-PPA. Pinne die Version und behandle Upgrades wie bei jedem anderen kleinen Tool.

Meine Einschätzung

Ein Jahr rasant schneller Fish-4.x-Entwicklung hat die Wette bestätigt. Fish hat 2026 sechs Feature-Releases ausgeliefert, das Rust-Rewrite hält stand, und das Projekt liefert weiter Quality-of-Life-Verbesserungen (Abkürzungs-Beschreibungen, Verlaufs-Zuverlässigkeits-Fixes, |&-Kompatibilität). Zsh Stable ist unterdessen immer noch 5.9 aus 2022.

Ich bin zu Fish gewechselt und habe nicht zurückgeschaut. Das Out-of-the-Box-Erlebnis ist einfach besser als alles, was ich mit Zsh-Plugins zusammenbauen konnte. Autosuggestions, Syntax-Highlighting, Man-Page-Completions und die saubere Scripting-Syntax machen die tägliche Arbeit schneller.

Die POSIX-Inkompatibilität hat mich etwa eine Woche gestört. Ich habe gelernt, bash -c 'command' für den gelegentlichen Einzeiler zu nutzen, und ich halte meine Automatisierungs-Scripts als Bash-Scripts. Es ist ein Non-Issue.

Wenn du einen tieferen Vergleich nur zwischen Fish und Zsh willst, habe ich einen fokussierten Artikel zu Fish Shell vs. Zsh geschrieben. Und wenn du deinen Fish-Prompt anpassen willst, schau dir an, wie du Starship mit Fish Shell einrichtest, oder meinen Fish-Shell-Themes-und-Prompts-Vergleich über Tide, Starship, Pure und Hydro.

Verwandte Fish-Shell-Guides

Hat diese Anleitung bei dir funktioniert?

Brauchst du Hilfe bei Astro, VPS oder einer Self-hosted-App? Services ansehen →