De la documentación de bash :
(list)
La lista se ejecuta en un entorno de subshell (ver ENTORNO DE EJECUCIÓN DE MANDOS a continuación). Las asignaciones variables y los comandos incorporados que afectan el entorno del shell no permanecen vigentes una vez que se completa el comando. El estado de retorno es el estado de salida de la lista.
En otras palabras, se asegura de que lo que suceda en 'lista' (como a cd
) no tenga ningún efecto fuera de (
y )
. La única cosa que se escape es el código de salida del último comando o con set -e
el primer comando que genera un error (aparte de unos pocos, como if
, while
, etc.)
((expression))
La expresión se evalúa de acuerdo con las reglas que se describen a continuación en EVALUACIÓN ARITMÉTICA. Si el valor de la expresión no es cero, el estado de retorno es 0; de lo contrario, el estado de retorno es 1. Esto es exactamente equivalente a dejar "expresión".
Esta es una extensión bash que te permite hacer matemáticas. Esto es algo similar a usar expr
sin todas las limitaciones de expr
(como tener espacios en todas partes, escapar *
, etc.)
[[ expression ]]
Devuelve un estado de 0 o 1 dependiendo de la evaluación de la expresión de expresión condicional. Las expresiones se componen de las primarias que se describen a continuación en EXPRESIONES CONDICIONALES. La división de palabras y la expansión del nombre de ruta no se realizan en las palabras entre [[y]]; Se realiza la expansión tilde, la expansión de parámetros y variables, la expansión aritmética, la sustitución de comandos, la sustitución de procesos y la eliminación de comillas. Los operadores condicionales como -f deben estar sin comillas para ser reconocidos como primarios.
Cuando se usa con [[, los operadores <y> se ordenan lexicográficamente usando la localización actual.
Esto ofrece una prueba avanzada para comparar cadenas, números y archivos un poco como las test
ofertas, pero más potente.
[ expr ]
Devuelve un estado de 0 (verdadero) o 1 (falso) dependiendo de la evaluación de la expresión condicional expr. Cada operador y operación y debe ser un argumento separado. Las expresiones se componen de las primarias descritas anteriormente en EXPRESIONES CONDICIONALES. test no acepta ninguna opción, ni acepta e ignora un argumento de - como el final de las opciones.
[...]
Este llama test
. En realidad, en los viejos tiempos, [
era un enlace simbólico a test
. Funciona de la misma manera y tienes las mismas limitaciones. Dado que un binario conoce el nombre con el que se inició, el programa de prueba puede analizar los parámetros hasta que encuentre un parámetro ]
. Divertidos trucos de Unix.
Tenga en cuenta que, en el caso de bash
, [
y test
son funciones integradas (como se menciona en un comentario), se aplican prácticamente las mismas limitaciones.