組み込みコロン「:」は何をしますか?

組み込みコロン「:」は何をしますか?

私は多くのシェルスクリプトを解読しましたが、時には最も単純なものが私を混乱させます。今日私は:(コロン)bashの組み込み機能を広く使用するスクリプトを見つけました。

これ文書それは簡単に見える:

: (a colon)  
     : [arguments]  

パラメータの拡張とリダイレクトの実行以外は何もしません。戻り状態は 0 です。

しかし、私は以前にシェル拡張のデモンストレーションで使用されたことを見たことがあります。私が見たスクリプトのユースケースでは、この構造を広く使用しています。

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

文字通り何百ものgrepがありますが、それ以上は同じです。上記の単純な構造に加えて、入出力方向の再指定はありません。戻り値は後でスクリプトでチェックされません。

私はそれを役に立たない構造、つまり「何もしないもの」と見ています。 「または何もしない」でこれらのgrepを終了すると、何が得られますか?どのような状況で、この設定は|| :単にすべてのインスタンスから削除するのとは異なる結果になりますか?

ベストアンサー1

組み込みコマンドは、:Bash「デフォルトの割り当て」シェル拡張にも役立ちます。ここで、拡張は通常副作用としてのみ使用され、拡張値は削除されます。

# assign FOO=bar iff FOO is unset or empty
: "${FOO:=bar}"

おすすめ記事