私は多くのシェルスクリプトをハッキングしましたが、最も単純なことが私を困惑させることがあります。今日、私は:
を多用したスクリプトに出くわしました。 (コロン)bashビルトイン。
文書化は十分に単純なようです:
: (a colon) : [arguments]
引数を拡張してリダイレクトを実行する以外に何もしません。戻りステータスはゼロです。
ただし、これまではシェル拡張のデモンストレーションでのみ使用されていました。私が遭遇したスクリプトのユースケースは、この構造を広範囲に使用しました:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
実際には何百ものgrepsがありましたが、それらはほとんど同じです。上記の単純な構造以外に、入出力リダイレクトは存在しません。スクリプトの後半で戻り値はチェックされません。
私はこれを「または何もしない」という役に立たない構成として読んでいます。これらの不満を「または何もしない」で終わらせることはどのような目的に役立つでしょうか?どのような場合、この構成は単に|| :
すべてのインスタンスから?
承認された回答:
:
が表示されます スクリプト内のsは、true
の代わりに使用されています 。 grep
の場合 ファイルに一致するものが見つからない場合は、ゼロ以外の終了コードが返されます。 jw013がコメントで言及しているように、errexit
の場合 おそらく-e
によって設定されます シバン行では、grep
のいずれかがあれば、スクリプトは終了します。 ■一致するものが見つかりません。明らかに、それは作者が望んでいたことではないので、彼は|| :
その特定の複合コマンドの終了ステータスを、より一般的な(私の経験では)|| true
/|| /bin/true
。