3 puntos por GN⁺ 2023-11-24 | 1 comentarios | Compartir por WhatsApp

Un archivo binario interesante en los sistemas Unix

  • En los sistemas Unix existen archivos binarios cuyos nombres son un solo símbolo.
  • Al ejecutar el comando /bin/[ se puede comprobar que existe un programa llamado [
  • [ y test apuntan al mismo archivo binario, y ambos comandos realizan en realidad la misma función.

Uso del programa test y de [

  • El programa test se usa para evaluar expresiones en el shell.
  • Se utiliza para comparar cadenas, comparar números y verificar condiciones de archivos.
  • test recibe argumentos, evalúa la expresión y devuelve 0 si es verdadera y 1 si es falsa.

Por qué existen los dos comandos

  • No está claro por qué existen los dos comandos, test y [, aunque se supone que fue para mejorar la legibilidad.
  • Usar el comando [ permite expresar condicionales de forma más limpia que con test.
  • Al usar [, el último argumento del comando debe terminar con ].

Diferencia entre comandos integrados y binarios externos

  • Como test y [ se usan con frecuencia en scripts de shell, están implementados como comandos integrados en la mayoría de los shells.
  • El comportamiento puede ser distinto entre el comando integrado y el binario externo, y también puede variar según el shell.

Uso de [[ y sus diferencias

  • [[ es una extensión de Bash que sustituye el uso de [.
  • [[, como comando integrado, puede cambiar las reglas básicas del lenguaje dentro de una expresión.
  • [[ puede producir resultados distintos al tratar los patrones glob en comparaciones de cadenas como literales.

Qué elegir al escribir scripts de shell

  • Para escribir scripts de shell portables, conviene usar [.
  • Si vas a escribir scripts exclusivos para Bash, [[ ofrece más funciones.

Combinación de expresiones del shell y expresiones de test

  • El shell tiene sus propias expresiones mediante los operadores !, &&, ||.
  • Las expresiones de test y las del shell pueden combinarse en un solo comando.

Opinión de GN⁺

Lo más importante de este texto es que en los sistemas Unix [ y test existen como dos comandos distintos que cumplen la misma función, y se supone que esto busca mejorar la legibilidad y la eficiencia de los scripts de shell. Esta información puede ser útil para ingenieros de software principiantes al escribir o entender scripts de shell, y también ayuda a comprender cómo funcionan los scripts de shell y cuáles son las diferencias entre distintos shells. Lo interesante de este texto es que muestra cómo las herramientas básicas de los scripts de shell pueden usarse de varias formas, y deja ver bien la complejidad y flexibilidad de la programación en shell.

1 comentarios

 
GN⁺ 2023-11-24
Comentarios de Hacker News
  • Agradecimiento del autor original y sugerencia de corregir el título

    El autor original agradece que la publicación se haya vuelto popular y propone agregar el año al título, además de evitar escribir "test" con mayúscula, porque "test" se refiere a un comando real.

  • Historia del comando "test" del shell Bourne y preferencia personal

    Explica que el shell Bourne fue creado en una época sin IDE, por lo que se usaba el comando "test" sin paréntesis ni corchetes. En lo personal, dice que prefiere la forma "test" sobre la forma con corchetes.

  • Ejemplo de condicionales sin usar un bloque if

    Presenta una forma de escribir condicionales de manera simple sin un bloque if, y muestra un ejemplo de salida de depuración enviada condicionalmente a stderr.

  • Cómo combinar bloques if con comandos normales

    Muestra que un bloque if puede evaluar comandos normales y da como ejemplo una búsqueda en logs usando el comando grep.

  • Reflexión sobre usar operadores lógicos dentro del comando test

    Expresa dudas sobre si conviene usar operadores lógicos dentro del comando test o separar la lógica en condicionales distintos. Dice que, si el rendimiento no es un problema, hay razones válidas para ambas opciones.

  • Ventajas de usar el comando "test" y la comodidad de "man test"

    Afirma que desde hace algunos años sostiene que es mejor usar el comando "test" sin corchetes. Esto refuerza la idea de que "test" es solo un comando simple, y explica que usar "man test" es más práctico que buscar en "man bash".

  • Precaución con el comportamiento de un solo argumento en [ y test

    Advierte que, al verificar si una variable no está vacía, no ponerla entre comillas puede producir resultados inesperados. Recalca que la variable debe ir entre comillas.

  • Diferencia entre /bin/[ y /bin/test en Linux y NetBSD

    Comparte que en Linux /bin/[ y /bin/test son distintos, mientras que en NetBSD son lo mismo.

  • Compartir enlaces a un análisis más profundo de test/[/[[ y a un blog sobre rarezas del shell

    Comparte documentación para entender mejor test, [, [[, junto con un enlace a un blog que explica varias características del shell.

  • Señala que [[ es exclusivo de bash y recomienda usarlo si seguro se usará bash

    Menciona que [[ es un comando exclusivo de bash, y aconseja usarlo cuando se tenga la certeza de que se trabajará con bash.

  • Confusión sobre la idea de que [ no forma parte del lenguaje de scripting de bash

    Expresa que le resultó confuso entender que [ no es parte del lenguaje de scripting de bash, sino simplemente un programa, y pide una explicación al respecto.

  • Opinión fuerte sobre el shell y rechazo al uso de [

    Expresa una postura firme de que no debería usarse [, sino solo "test". Enfatiza que [ parece sintaxis del lenguaje, pero en realidad es un programa, y sostiene que para evaluar cadenas debería usarse la sentencia case.