GNU/Linux >> Linux Esercitazione >  >> Linux

A che scopo serve il Colon Builtin ':'?

Ho hackerato molti script di shell e a volte le cose più semplici mi lasciano perplesso. Oggi mi sono imbattuto in uno script che faceva ampio uso di : (due punti) bash integrato.

La documentazione sembra abbastanza semplice:

: (a colon)  
     : [arguments]  

Non fare altro che espandere argomenti ed eseguire reindirizzamenti. Lo stato del reso è zero.

Tuttavia in precedenza l'ho visto utilizzato solo nelle dimostrazioni di espansione della shell. Il caso d'uso nello script in cui mi sono imbattuto ha fatto ampio uso di questa struttura:

if [ -f ${file} ]; then
    grep some_string ${file} >> otherfile || :
    grep other_string ${file} >> otherfile || :
fi

In realtà c'erano centinaia di grep, ma sono più o meno gli stessi. Non sono presenti reindirizzamenti di input/output oltre alla semplice struttura di cui sopra. Nessun valore restituito viene verificato più avanti nello script.

Sto leggendo questo come un costrutto inutile che dice "o non fare nulla". A quale scopo potrebbe servire porre fine a questi greps con "o non fare nulla"? In quale caso questo costrutto causerebbe un risultato diverso rispetto alla semplice interruzione di || : da tutte le istanze?

Risposta accettata:

Appare il : s nel tuo script vengono utilizzati al posto di true . Se grep non trova una corrispondenza nel file, restituirà un codice di uscita diverso da zero; come jw013 menziona in un commento, se errexit è impostato, probabilmente da -e sulla riga shebang, lo script sarebbe uscito se uno qualsiasi dei grep s non riesce a trovare una corrispondenza. Chiaramente, non è quello che voleva l'autore, quindi ha aggiunto || : per rendere lo stato di uscita di quel particolare comando composto sempre zero, come il più comune (nella mia esperienza) || true /|| /bin/true .


Linux
  1. Cosa significa `:-` in uno script di shell?

  2. Cosa significa nell'output di Ps?

  3. Cosa fa Rackspace nel cloud?

  4. Qual è lo scopo del gruppo "wheel" in Linux

  5. Cosa fa la riga '!/bin/sh -e'?

Qual è lo scopo del file .bashrc in Linux

Cosa fa la chiamata di sistema brk()?

Cosa significa 'rc' in `.bashrc`, ecc.?

Qual è lo scopo di cd ` (backtick)?

Cosa fa questo script sh se eseguito?

qual è il significato di 1 alla fine dello script awk