これがBashの "else"ステートメント内に配列を作成する正しい方法ですか?

これがBashの

これが正しいかどうかを知っている人はいますか?これがBashの "else"ステートメント内に配列を作成する正しい方法ですか? else [[ $SELECTION != "a|b|c|x" ]]

ベストアンサー1

私はあなたの目的が$SELECTION次のようにテストすることを前提としています。いいえ a、、、bまたはcxステートメントの「else-if」ブランチでこれを実行しようとしていますif

テストでは、$SELECTIONリテラル文字列ではないかどうかをテストしますa|b|c|x。 "else-if"分岐(次のように書かれています)でテストを使用したい場合は、構文が正しくありませんelif [[ ... ]]

、、、または他のものがあるかどうかを$SELECTIONテストするには、次のようにします。abcx

if ...; then
    ...
else
    case $SELECTION in
        a|b|c|x)
            # do nothing here
            ;;
        *)
            echo 'it is not a, b, c, or x'
    esac
fi

caseこれは、指定された値が|区切られたパターンと一致する場合は何も実行せず、echo一致しない場合に呼び出されるPOSIX標準ステートメントを使用します。

または、

if ...; then
    ...
elif [[ $SELECTION != @(a|b|c|x) ]]; then
    echo 'it is not a, b, c, or x'
fi

|これは、insideで区切られたすべてのパターンと一致する拡張ワイルドカードパターンを使用します@(...)

または厄介なテストを削除してください!=

if ...; then
    ...
elif [[ $SELECTION == !(a|b|c|x) ]]; then
    echo 'it is not a, b, c, or x'
fi

パターンは引用を解除する必要があります。テストがelif分岐で実行されるかどうかは、テスト自体とは関係ありません。

マニュアルの「パターン一致」のセクションを参照してくださいbash

おすすめ記事