Fish Shell vs Bash vs Zsh - Comparación Completa 2026
Una comparación honesta de Fish, Bash y Zsh que cubre sintaxis, rendimiento, plugins, scripting y usabilidad diaria para que puedas elegir el shell adecuado.
He usado los tres shells para trabajo real. Bash fue mi opción predeterminada durante años porque simplemente estaba ahí. Me pasé a Zsh cuando Oh My Zsh se hizo popular, y lo usé durante bastante tiempo. Después probé Fish por curiosidad, y se convirtió en mi shell de uso diario. Cada shell tiene su personalidad, y el “correcto” depende de lo que te importa.
Esta no es una comparación teórica. Voy a repasar lo que realmente importa cuando te sientas y escribes comandos todos los días.
Resumen rápido
| Característica | Fish | Bash | Zsh |
|---|---|---|---|
| Autosugerencias | Integradas | No (necesita plugin) | Plugin (zsh-autosuggestions) |
| Resaltado de sintaxis | Integrado | No | Plugin (zsh-syntax-highlighting) |
| Completado con Tab | Completo, listo para usar | Básico | Bueno con plugins |
| Compatible con POSIX | No | Sí | Mayormente sí |
| Sintaxis de scripting | Propia | POSIX sh | Mayormente POSIX + extensiones |
| Archivo de configuración | ~/.config/fish/config.fish | ~/.bashrc | ~/.zshrc |
| Predeterminado en Linux | No | Generalmente sí | No (predeterminado en macOS) |
| Escrito en | Rust (desde 4.0) | C | C |
| Configuración web | Sí (fish_config) | No | No |
| Gestores de plugins | Fisher, Oh My Fish | Ninguno integrado | Oh My Zsh, Antigen, etc. |
Autosugerencias y completados
Aquí es donde Fish toma ventaja de inmediato. Abre una instalación nueva de Fish, empieza a escribir, y obtienes sugerencias en gris de tu historial de comandos. Presiona la flecha derecha para aceptar. Sin configuración, sin plugins, nada que instalar. Escribí una guía completa sobre autocompletado y sugerencias de Fish Shell que cubre todo lo que este sistema puede hacer.
Bash no tiene nada parecido de serie. Puedes instalar ble.sh o usar fzf para búsqueda difusa en el historial, pero requiere esfuerzo.
Zsh lo consigue con zsh-autosuggestions, pero tienes que instalarlo tú mismo. Escribí una guía sobre cómo habilitar autocompletado de comandos en Zsh si prefieres esa ruta.
Fish también analiza las páginas man para generar completados automáticamente. Escribe git y presiona tab, y obtienes completados para subcomandos, flags y nombres de ramas sin ninguna configuración adicional. Zsh puede igualar esto con la configuración adecuada (compinit más plugins), pero requiere trabajo. El completado con tab de Bash es muy básico en comparación.
Resaltado de sintaxis
Fish resalta tus comandos mientras los escribes. Los comandos válidos tienen un color, los inválidos aparecen en rojo, y las cadenas de texto tienen su propio color. Puedes detectar errores tipográficos antes de presionar enter. Tengo una guía detallada sobre el resaltado de sintaxis de Fish Shell si quieres ver cómo funciona internamente.
Zsh necesita zsh-syntax-highlighting para el mismo comportamiento. Escribí sobre habilitar resaltado de sintaxis en Zsh si lo quieres.
Bash no tiene resaltado de sintaxis integrado en absoluto.
Scripting y compatibilidad con POSIX
Aquí está el compromiso. Fish tiene su propia sintaxis de scripting que intencionalmente no es compatible con POSIX. Los desarrolladores de Fish tomaron esta decisión para obtener un lenguaje más limpio, y honestamente la sintaxis es más fácil de leer:
# Fish - sintaxis más limpia
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
Compara eso con Bash:
# Bash - estilo POSIX
if [ -f ~/.bashrc_local ]; then
source ~/.bashrc_local
fi
for file in *.txt; do
echo "$file"
done
# Variables
greeting="hello"
echo "$greeting"
La versión de Fish es más legible. Pero aquí viene el inconveniente: no puedes copiar y pegar comandos de Bash de Stack Overflow y esperar que funcionen en Fish. Cualquier cosa que use && entre comandos, $(...) para sustitución de comandos (Fish usa (...) sin el signo de dólar), o pruebas [[ ]] específicas de Bash no funcionará directamente.
En la práctica, esto importa menos de lo que pensarías. La mayor parte del tiempo estás ejecutando comandos, no escribiendo scripts de shell. Y cuando necesitas un script, siempre puedes poner #!/bin/bash al principio y ejecutarlo como un script de Bash desde Fish. Para comandos personalizados específicos de Fish, revisa mi guía sobre funciones de Fish Shell.
Consejo de compatibilidad POSIX
Puedes ejecutar cualquier script de Bash desde Fish. Solo usa bash script.sh o haz el script ejecutable con un shebang #!/bin/bash. La sintaxis no-POSIX de Fish solo afecta lo que escribes interactivamente y los scripts específicos de Fish.
Configuración
Fish almacena su configuración en ~/.config/fish/config.fish y soporta un directorio conf.d/ para archivos de configuración modulares. También tiene una herramienta de configuración web: ejecuta fish_config y se abre un navegador donde puedes cambiar colores, ver funciones y establecer variables. Suena superfluo, pero es genuinamente útil para previsualizar temas de colores rápidamente.
Bash usa ~/.bashrc (y a veces ~/.bash_profile). Todo es edición manual.
Zsh usa ~/.zshrc. Con Oh My Zsh instalado, obtienes un framework que gestiona plugins y temas, pero el archivo de configuración puede volverse largo. Cubrí algunos de los mejores plugins de Oh My Zsh si estás en el equipo Zsh.
Rendimiento
Fish 4.0 fue reescrito de C++ a Rust, lanzado en febrero de 2025. La última versión es 4.5.0 (febrero de 2026). El inicio se siente instantáneo en mis máquinas. Es ligeramente más pesado que un shell Bash básico, pero la diferencia se mide en milisegundos y no lo vas a notar.
Zsh con Oh My Zsh cargado y varios plugins puede ser notablemente lento al iniciar, a veces tardando más de un segundo. Hay soluciones (carga diferida, gestores de plugins más ligeros como zinit), pero es algo que tienes que gestionar activamente.
Bash puro arranca más rápido porque es el más minimalista. Pero también obtienes menos funcionalidades de serie.
Para uso interactivo, Fish se siente el más ágil porque las autosugerencias y los completados funcionan al instante. El “rendimiento” que más importa para un shell es lo rápido que responde mientras escribes, y Fish gana aquí.
Ecosistemas de plugins
Fish tiene dos gestores de plugins principales:
- Fisher - ligero, rápido, sin configuración. Es lo que la mayoría usa ahora. Ejecuta
fisher install author/pluginy listo. - Oh My Fish - un framework similar a Oh My Zsh. Lleva un tiempo sin mantenimiento y la página de GitHub incluye una advertencia al respecto. Yo recomendaría Fisher para instalaciones nuevas, pero si tienes curiosidad, tengo una guía sobre instalación y uso de Oh My Fish.
Profundizo mucho más en esto en Mejores plugins y herramientas para Fish Shell.
Zsh tiene el ecosistema de plugins más grande gracias a Oh My Zsh, que tiene más de 300 plugins y más de 150 temas. Antigen, zinit y zplug son gestores de plugins alternativos con diferentes perfiles de rendimiento.
Bash no tiene un ecosistema de plugins real. Existen frameworks de dotfiles como bash-it, pero la adopción es mucho menor.
Curva de aprendizaje
Bash: probablemente ya lo conoces. Está en todas partes, y la mayoría de tutoriales de Linux asumen que lo estás usando.
Zsh: casi sin curva de aprendizaje viniendo de Bash. La sintaxis es casi idéntica, y Oh My Zsh proporciona una experiencia guiada. Es esencialmente Bash con extras.
Fish: hay un pequeño periodo de adaptación. Las diferencias de sintaxis te confunden durante el primer día o dos, especialmente en torno a la asignación de variables (set en lugar de =) y la sustitución de comandos. Después de eso, las funcionalidades integradas significan que en realidad tienes menos que aprender en general porque no necesitas configurar tanto.
Cuándo usar cuál
Elige Fish si quieres un shell que funcione bien desde el primer momento, no escribes scripts POSIX con frecuencia, y valoras las autosugerencias y el resaltado de sintaxis sin configuración. Si esto te describe, revisa cómo instalar Fish Shell en Ubuntu para empezar.
Elige Zsh si quieres lo mejor de ambos mundos: compatibilidad con Bash con funcionalidades modernas mediante plugins. Te sientes cómodo configurando cosas. Oh My Zsh te da una gran comunidad y montones de temas.
Elige Bash si escribes scripts de shell que necesitan ejecutarse en cualquier lugar, trabajas en servidores donde Bash es el único shell disponible, o prefieres la máxima compatibilidad POSIX.
Mi opinión
Me pasé a Fish hace aproximadamente un año y no he mirado atrás. La experiencia de uso desde el primer momento es simplemente mejor que cualquier cosa que logré construir con plugins de Zsh. Las autosugerencias, el resaltado de sintaxis, los completados de páginas man y la sintaxis de scripting limpia hacen el trabajo diario más rápido.
La incompatibilidad con POSIX me molestó durante una semana aproximadamente. Aprendí a usar bash -c 'command' para los comandos ocasionales, y mantengo mis scripts de automatización como scripts de Bash. No es un problema.
Si quieres una comparación más profunda entre solo Fish y Zsh, escribí un artículo enfocado sobre Fish Shell vs Zsh. Y si quieres personalizar tu prompt de Fish, mira cómo configurar Starship con Fish Shell o mi comparación de temas y prompts de Fish Shell que cubre Tide, Starship, Pure y Hydro.
Guías relacionadas de Fish Shell
- Autocompletado y sugerencias de Fish Shell - domina el sistema de completado de Fish
- Resaltado de sintaxis de Fish Shell - cómo funciona el resaltado en Fish
- Funciones y comandos personalizados de Fish Shell - escribe tus propias funciones de Fish
- Historial y persistencia de Fish Shell - gestiona y persiste tu historial de comandos
- Temas y prompts de Fish Shell - compara Tide, Starship, Pure y Hydro
- Guía de Oh My Fish - instala temas y plugins con OMF
- NVM con Fish Shell - gestiona versiones de Node.js en Fish
- Fish Shell en macOS - configura Fish en Mac