typestar

Lenguajes

Bash

El lenguaje que todos usan y casi nadie estudia.

Primera versión
1989
Creado por
Brian Fox, for the GNU Project
Tipado
Dinámico; todo es una cadena hasta que la aritmética diga lo contrario
Extensiones de archivo
.sh, .bash

Para qué sirve

Bash es el tejido conectivo de la computación. Es el shell por defecto en la mayoría de los sistemas Linux, el lenguaje de los pipelines de CI, de las líneas RUN de los Dockerfiles, de los scripts de deploy, de los cron jobs y de los dotfiles que hacen tuya una máquina. Ningún puesto de trabajo se llama bash, y casi todos los trabajos técnicos lo usan cada semana. Ese desajuste es exactamente la razón por la que practicarlo a conciencia rinde: el lenguaje está en todas partes y casi siempre se aprende copiando y pegando.

Como lenguaje es más extraño de lo que parece. Todo es una cadena, las comillas son semántica y no estilo, y el código de salida del último comando dirige en silencio &&, || e if. Lo bueno es genuinamente bueno: los pipelines componen herramientas pequeñas en one-liners que en otros lenguajes piden bibliotecas, y la sustitución de procesos, la expansión de parámetros y los traps resuelven problemas reales en muy pocos caracteres.

Sus límites llegan puntuales. La aritmética es solo de enteros, los arreglos son incómodos, el manejo de errores es set -euo pipefail y cruzar los dedos, y pasadas unas cientos de líneas lo correcto suele ser reescribir en Python. Saber dónde está esa línea — y escribir hasta ahí scripts limpios que pasen shellcheck — es la habilidad de verdad.

De dónde viene

Brian Fox escribió bash para el Proyecto GNU y lo publicó en 1989 como reemplazo libre del shell de Unix que Steve Bourne creó en 1977 — el nombre significa Bourne-Again SHell. Absorbió las comodidades interactivas de csh y ksh (historial, control de trabajos, autocompletado) sin dejar de ser compatible con los scripts Bourne que el mundo ya ejecutaba.

Las distribuciones de Linux adoptaron bash como shell por defecto a principios de los noventa, y con Linux entró a cada sala de servidores y después a cada contenedor. POSIX estandarizó el núcleo del lenguaje del shell en 1992; bash implementa el estándar y lo extiende — arreglos, [[ ]], sustitución de procesos --, y por eso 'funciona en bash' y 'funciona en sh' son afirmaciones distintas.

La versión 3 (2004) trajo coincidencia de expresiones regulares en [[ ]], la 4 (2009) arreglos asociativos y mapfile, la 5 (2019) todo más rápido y más estricto. macOS congeló su bash incluido en la 3.2 por temas de licencia y cambió su shell por defecto a zsh en 2019: por eso 'bash en una Mac' suele significar una pieza de museo, salvo que Homebrew haya intervenido.

Cómo se siente teclearlo

Bash se teclea como ningún otro lenguaje de aquí: los signos de dólar y las llaves llegan sin pausa, las comillas se abren y se cierran alrededor de casi cada expansión, y la puntuación rota entre [[ corchetes dobles ]], (( aritmética )) y $( sustitución ). Los fragmentos cargados de expansiones llevan barras de tres estrellas más bajas exactamente por eso. La recompensa es memoria muscular para los caracteres que el trabajo real de shell usa de verdad.

Practica Bash

26 pasos en 1 tours, desde lo básico hasta programas completos.

Los tours

Documentación oficial

Otros lenguajes