Diferencias de comportamiento
Algunas diferencias en Bash 4.3.11:
Recomendación : usar siempre []
.
Hay equivalentes POSIX para cada [[ ]]
construcción que he visto.
Si te [[ ]]
usas:
- perder portabilidad
- obligar al lector a aprender las complejidades de otra extensión bash.
[
es solo un comando regular con un nombre extraño, no hay semántica especial involucrada.
¹ Inspirado en la [[...]]
construcción equivalente en el shell Korn
² pero falla para algunos valores de a
o b
(like +
o index
) y hace una comparación numérica si a
y se b
parecen a enteros decimales. expr "x$a" '<' "x$b"
trabaja alrededor de ambos.
³ y también falla para algunos valores de a
o b
like !
or (
.
Bas en bash 3.2 y superior y la compatibilidad proporcionada a bash 3.1 no está habilitada (como con BASH_COMPAT=3.1
)
⁵ aunque la agrupación (aquí con el {...;}
grupo de comandos en lugar del (...)
cual se ejecutaría una subshell innecesaria) no es necesaria ya que los operadores de shell ||
y &&
(en oposición a los operadores ||
y &&
[[...]]
o los operadores -o
/ -a
[
) tienen la misma prioridad. Entonces [ a = a ] || [ a = b ] && [ a = b ]
sería equivalente.
[[
a él, el código es bueno y claro, pero recuerde ese día cuando portará sus scripts en el sistema con un shell predeterminado que no es ,bash
oksh
etc.[
es más feo, engorroso, pero funciona comoAK-47
en cualquier situación.