Un dos puntos de shell no hace nada. Úsalo de todos modos
Una publicación sobre el comando `:` de no operación del shell POSIX provoca un debate sobre si estos modismos tan breves son herramientas ingeniosas o riesgos para la legibilidad. Los comentaristas destacan usos prácticos de `:` para validar argumentos, hacer redirecciones y aplicar trucos de scripting, pero muchos argumentan que comprimir lógica de varias líneas en líneas únicas opacas hace que los scripts de shell sean más difíciles de mantener, especialmente a escala. El intercambio se amplía hacia una crítica del propio scripting en shell: sus trampas, peculiaridades de portabilidad y su papel en la era de Python, PowerShell y el código generado por LLMs.
Utilidad del comando : (null)
- Muchos encuentran algunos modismos realmente útiles, especialmente para:
- Validar argumentos/variables de entorno requeridos:
${1:?missing argument}oVAR="${VAR:?message}". - Proporcionar valores predeterminados:
: "${DOTFILES_PATH:=$HOME/.dotfiles}". - Servir como marcador de posición en
if/whilecuando se requiere sintácticamente un comando. - Funcionar como una línea de “docstring” dentro de funciones o como un alias ficticio para facilitar el descubrimiento.
- Validar argumentos/variables de entorno requeridos:
- Otros ven la mayoría de los ejemplos como ingeniosos pero poco prácticos, y que básicamente solo comprimen código legible en líneas únicas.
Detalles sobre redirección, truncamiento y portabilidad
- Algunos señalan que
: >filetanto trunca como crea el archivo, algo que supuestamente el artículo subraya poco. - La discusión aclara que las redirecciones pueden funcionar sin
:, pero el comportamiento difiere entre shells (por ejemplo, zsh imprimirá el contenido del archivo para< filea menos que se adjunte a:). - Ejemplos con subshell y sin subshell muestran distinto comportamiento bajo
set -e/--posix, lo que justifica( : < file )en algunos contextos. :es un builtin, mientras quetruepuede ser una utilidad externa;:ignora los argumentos de forma segura, así que a veces se prefiere.
Legibilidad frente a ingenio
- Fuerte rechazo a convertir código multi-línea y comprensible en líneas únicas densas.
- Varios sostienen que cualquier cosa más allá de scripts pequeños debería priorizar claridad y manejo explícito de errores, no concisión.
- Algunos ven estos trucos como acertijos divertidos, apropiados para uso personal o código ofuscado, pero inaceptables en producción.
Shell frente a otros lenguajes (y LLMs)
- Múltiples comentarios sostienen que la sintaxis del shell POSIX es fundamentalmente mala para programas grandes; se prefieren Python/Ruby/PowerShell para scripts mantenibles.
- Otros defienden el shell como algo singularmente adecuado para automatización pequeña y orquestación de procesos, pese a sus rarezas, especialmente con herramientas como ShellCheck.
- Se informa que los LLMs son buenos generando scripts complejos de shell/Perl, pero aún requieren revisión; la calidad y la sobreingeniería son quejas recurrentes.
Shells y ecosistemas alternativos
- Menciones de fish, nushell, oil, zsh y especialmente PowerShell como opciones más modernas o expresivas, con debate sobre:
- Tiempo de arranque y huella de dependencias.
- Idoneidad como “shell del sistema” frente a lenguaje de scripting.
- Verbosidad, complejidad y disponibilidad multiplataforma.