GNU/Linux >> Znalost Linux >  >> Linux

K jakému účelu slouží Colon Builtin „:“?

Naboural jsem se do spousty skriptů shellu a někdy mě zmátly ty nejjednodušší věci. Dnes jsem narazil na skript, který široce využíval : (dvojtečka) vestavěná bash.

Dokumentace se zdá být dostatečně jednoduchá:

: (a colon)  
     : [arguments]  

Nedělejte nic kromě rozšiřování argumentů a provádění přesměrování. Návratový stav je nula.

Nicméně dříve jsem to viděl pouze v ukázkách expanze shellu. Případ použití ve skriptu, na který jsem narazil, tuto strukturu široce využíval:

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

Ve skutečnosti byly stovky grepů, ale jsou jen více stejných. Nejsou přítomna žádná přesměrování vstupu/výstupu kromě jednoduché struktury výše. Žádné návratové hodnoty se později ve skriptu nekontrolují.

Čtu to jako zbytečný konstrukt, který říká „nebo nedělej nic“. K čemu by mohlo posloužit ukončení těchto greps slovem „nebo nedělat nic“? V jakém případě by tato konstrukce způsobila jiný výsledek než pouhé vynechání || : ze všech případů?

Přijatá odpověď:

Zobrazí se : s ve vašem skriptu se používají místo true . Pokud grep nenajde v souboru shodu, vrátí nenulový výstupní kód; jak uvádí jw013 v komentáři, pokud errexit je nastaven pravděpodobně pomocí -e na řádku shebang by skript skončil, pokud by došlo k některému z grep se nepodařilo najít shodu. Je zřejmé, že to autor nechtěl, a tak (s)přidal || : aby byl stav ukončení tohoto konkrétního složeného příkazu vždy nulový, jako běžnější (podle mých zkušeností) || true /|| /bin/true .


Linux
  1. Point of Uniq -u a co to dělá??

  2. Jaký je účel uživatele „mysql.sys@localhost“.

  3. Jaký je účel skupiny „wheel“ v Linuxu

  1. Jaký je účel souboru .bashrc v Linuxu

  2. Co dělá řádek '!/bin/sh -e'?

  3. Co znamená „rc“ v „.bashrc“ atd.?

  1. Co znamená `:-` ve skriptu Shell?

  2. Co znamená Ampersand na konci řádku skriptu Shell?

  3. Co znamená schopnost ep?