これが正しいかどうかを知っている人はいますか?これがBashの "else"ステートメント内に配列を作成する正しい方法ですか?
else [[ $SELECTION != "a|b|c|x" ]]
答え1
私はあなたの目的が$SELECTION
次のようにテストすることを前提としています。いいえ a
、、、b
またはc
、x
ステートメントの「else-if」ブランチでこれを実行しようとしていますif
。
テストでは、$SELECTION
リテラル文字列ではないかどうかをテストしますa|b|c|x
。 "else-if"分岐(次のように書かれています)でテストを使用したい場合は、構文が正しくありませんelif [[ ... ]]
。
、、、または他のものがあるかどうかを$SELECTION
テストするには、次のようにします。a
b
c
x
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
。