GNU/Linux >> Tutoriales Linux >  >> Linux

¿Para qué sirve el Colon Builtin ':' Sirve?

He pirateado muchos scripts de shell y, a veces, las cosas más simples me desconciertan. Hoy me encontré con un script que hacía un uso extensivo del : (dos puntos) bash integrado.

La documentación parece bastante simple:

: (a colon)  
     : [arguments]  

No haga nada más que expandir argumentos y realizar redirecciones. El estado de retorno es cero.

Sin embargo, anteriormente solo he visto esto utilizado en demostraciones de expansión de shell. El caso de uso en el script que encontré hizo un uso extensivo 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 además de la estructura simple anterior. Ningún valor de retorno se verifica más adelante en el script.

Estoy leyendo esto como una construcción inútil que dice "o no hacer nada". ¿Qué propósito podría servir para terminar estos greps con "o no hacer nada"? ¿En qué caso esta construcción causaría un resultado diferente a simplemente omitir el || : de todas las instancias?

Respuesta aceptada:

Aparece el : s en su secuencia de comandos se están utilizando en lugar de true . Si grep no encuentra una coincidencia en el archivo, devolverá un código de salida distinto de cero; como jw013 menciona en un comentario, si errexit está configurado, probablemente por -e en la línea shebang, el script saldría si alguno de los grep s no puede encontrar una coincidencia. Claramente, eso no es lo que el autor quería, así que agregó || : para hacer que el estado de salida de ese comando compuesto en particular sea siempre cero, como el más común (según mi experiencia) || true /|| /bin/true .


Linux
  1. ¿Qué significa `:-` en un script de Shell?

  2. El Punto De Uniq -u Y Que Hace??

  3. ¿Cuál es el propósito del usuario “mysql.sys@localhost”?

  4. ¿Qué hace la llamada al sistema brk()?

  5. ¿Qué hace el permiso de ejecución?

¿Cuál es el propósito del archivo .bashrc en Linux?

¿Qué hace la línea '!/bin/sh -e'?

¿Qué significa set -e en un script bash?

¿Qué hace este script sh si se ejecuta?

¿Cuál es el significado de 1 al final del script awk?

Script de inicio de Linux, ¿qué logra 0<&- &>?