
Tengo esta declaración if [ ! - f "$i" -o "$i"x = "$MTR"x]
y me preguntaba qué logra esta declaración. Entiendo que la primera parte verifica si la variable i
no es un archivo, pero no puedo entender cuál es la segunda parte después de -o
(que significa OR lógico, creo). Cualquier ayuda será de gran ayuda.
Respuesta1
Correcto, el -o representa un OR lógico.
Compara "$i"x = "$MTR"x
el contenido de las variables $i
y $MTR
.
Creo que x
se agrega a ambas variables para evitar problemas si alguna de las dos variables no está configurada o no está inicializada.
Respuesta2
Suponiendo que la declaración es
if [ ! -f "$i" -o "$i"x = "$MTR"x ]
Comprueba -f "$i"
si el valor $i
corresponde a un archivo normal (o un enlace simbólico a un archivo normal). Luego esta prueba se niega con !
. Es -o
una forma anticuada y obsoleta de decir "OR lógico".
Las "$i"x = "$MTR"x
pruebas, de una manera un tanto incómoda que puede haber sido necesaria en implementaciones realmente antiguas del sh
shell, indican si $i
y $MTR
es la misma cadena.
En un shell estándar (actual) sh
, la declaración se escribiría
if [ ! -f "$i" ] || [ "$i" = "$MTR" ]
o, con un poco de lógica aplicada,
if [ "$i" = "$MTR" ] && [ -f "$i" ] || [ ! -f "$i" ]
En palabras: la afirmación es verdadera si $i
es la misma cadena $MTR
y se refiere a un archivo normal existente (o un enlace simbólico a uno), o si $i
no es el nombre de un archivo.
Puede ser más interesante observar lo que significa que esta declaración seaFALSO. Sólo es falso si $i
y $MTR
no es la misma cadenay $i
hace referencia a un archivo existente.