bash サフィックス `||:` [重複]

bash サフィックス `||:` [重複]

Bashの構文は何ですか||:する?


はい

$ ls foo ||:

常に成功を収める以外に特別なことがありますか?

$ ls foo ||:; echo $?ls foo存在しないので失敗しても、foo出力は常にゼロになりますか?

で始まるスクリプトで見ましたset -e。したがって、エラーが発生しないようにするため、このサフィックス付きのコマンドがエラーを返してもスクリプトはすぐに終了しないようです。

ベストアンサー1

前のコマンドが成功を返さなかった場合にのみ成功を返します。

set -e(別名)を使用すると、エラーを返すset -o errexitコマンドラインがスクリプトを中断します。||:コマンドラインの末尾に追加するとエラーは発生しません(エラーがある場合は、次のコマンドがtrueを返すため)。

基本的には次のようになります。前のコマンドにエラーがある場合は、trueコマンドラインがエラーなしで終了し、スクリプトが実行され続けるように実行してください。

lsエラーが返されたため、日付を表示せずにスクリプトが中断されます。

set -e
ls -l /tmp/nonexistentfile
date

:ただし、最後のコマンドは(true)なので、スクリプトは中断されず、日付が表示されます。

set -e
ls -l /tmp/nonexistentfile || :
date

おすすめ記事