He pirateado muchos scripts de shell, y a veces las cosas más simples me desconciertan. Hoy me encontré con un script que hizo un uso extenso del :
bash (colon) incorporado.
La documentación parece bastante simple:
: (a colon) : [arguments]
No haga nada más que expandir argumentos y realizar redireccionamientos. El estado de retorno es cero.
Sin embargo, anteriormente solo he visto esto usado en demostraciones de expansión de shell. El caso de uso en el script que encontré hizo un uso extenso de esta estructura:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
En realidad, había cientos de greps, pero son más de lo mismo. No hay redireccionamientos de entrada / salida presentes aparte de la estructura simple anterior. No se verifican valores de retorno más adelante en el script.
Estoy leyendo esto como una construcción inútil que dice "o no hacer nada". ¿Para qué sirve terminar estos greps con "o no hacer nada"? ¿En qué caso esta construcción causaría un resultado diferente que simplemente dejar de lado || :
todas las instancias?
:
como alternativa atrue
. Tal vezerrexit
está configurado y al autor no le importa el estado de salida de algunos comandos.