Estoy un poco confundido sobre qué hacen estos operadores de manera diferente cuando se usan en bash (corchetes, corchetes dobles, paréntesis y paréntesis doble).
[[ , [ , ( , ((
He visto a personas usarlas en declaraciones if como esta:
if [[condition]]
if [condition]
if ((condition))
if (condition)
Respuesta aceptada:
En shells tipo Bourne, un if
la declaración generalmente se ve como
if
command-list1
then
command-list2
else
command-list3
fi
El then
se ejecuta si el código de salida de command-list1
lista de comandos es cero. Si el código de salida es distinto de cero, entonces else
se ejecuta la cláusula. command-list1
puede ser
simple o complejo. Puede ser, por ejemplo, una secuencia de uno o más pipelines separados por uno de los operadores ;
, &
, &&
, ||
o nueva línea. El if
las condiciones que se muestran a continuación son solo casos especiales de command-list1
:
-
if [ condition ]
[
es otro nombre para latest
tradicional dominio.[
/test
es una utilidad POSIX estándar. Todos los shells POSIX lo tienen incorporado (aunque POSIX² no lo requiere). Latest
El comando establece un código de salida y elif
declaración actúa en consecuencia. Las pruebas típicas son si existe un archivo o si un número es igual a otro. -
if [[ condition ]]
Esta es una nueva variación mejorada de
test
¹ de ksh ese golpe , zsh , yash , busybox sh también apoyo. Este[[ ... ]]
construct también establece un código de salida y elif
declaración actúa en consecuencia. Entre sus funciones ampliadas, puede probar si una cadena coincide con un patrón de comodín (no en busybox sh ). -
if ((condition))
Otro ksh extensión que bash y zsh también apoyo. Esto realiza la aritmética. Como resultado de la aritmética, se establece un código de salida y el
if
declaración actúa en consecuencia. Devuelve un código de salida de cero (verdadero) si el resultado del cálculo aritmético es distinto de cero. Me gusta[[...]]
, este formulario no es POSIX y, por lo tanto, no es portátil. -
if (command)
Esto ejecuta el comando en una subcapa. Cuando se completa el comando, establece un código de salida y el
if
declaración actúa en consecuencia.Una razón típica para usar una subcapa como esta es limitar los efectos secundarios del
command
sicommand
asignaciones de variables requeridas u otros cambios en el entorno del shell. Dichos cambios no permanecen después de que se completa la subcapa. -
if command
se ejecuta el comando y
if
declaración actúa de acuerdo con su código de salida.