1. ホーム
  2. bash

[解決済み] パイプと二重パイプのどちらの OR 演算子を使うか?

2022-02-17 14:03:02

質問

bashスクリプトのコードを見ていると、たまに | と、時々 || しかし、どちらがいいのかわからない。

のようなことをやろうとしています。

set -e;

ret=0 && { which ansible || ret=$?; }

if [[ ${ret} -ne 0 ]]; then
    # install ansible here
fi

このシナリオでは、どのOR演算子が好ましいかアドバイスしてください。

どのように解決するのですか?

| はOR演算子ではありません。あなたは かもしれない 使用 || とはいえ。

which ansible || {
  true # put your code to install ansible here
}

これは if :

if ! which ansible; then
  true # put your code to install ansible here
fi


ところで、このように type (シェルビルトイン)ではなく which (外部コマンド)です。 type の方が高速で、シェルの挙動をよりよく理解しています。もしあなたが ansible コマンドを提供し、例えばシェル関数が本当のコマンドを呼び出すとします。 which はその存在に気づきませんが type は、それが利用可能であることを正しく検出します。