case - 条件に応じてコマンドブロックを実行する

概要

switch VALUE
   [case [GLOB ...]
       [COMMAND ...]]
end

説明

switch は、指定された値がいずれかの値と一致するかに基づいて、複数のコマンドブロックのうちの 1 つを実行します。case は、どのブロックを実行すべきかを決定するために switch 文とともに使用されます。

case コマンドには 1 つ以上のパラメータが与えられます。 switch コマンドで指定された文字列に一致するパラメータを持つ最初の case コマンドが評価されます。case のパラメータにはワイルドカードを含めることができます。これらがファイル名を用いた通常のワイルドカード展開をされないようにするために、エスケープするか引用符で囲む必要があります。

fish の case 文では「フォールスルー(一致した後のブロックを続けて実行すること)」は行われないことに注意してください。最初に一致した case のみが実行されます。

case 文内のコマンド置換は、その本体(body)が実行されない場合でも評価されることに注意してください。値をパラメータと比較するためには、コマンド置換を含むすべての置換を事前に実行しておく必要があるためです。

$animal に動物の名前が含まれているとします。その場合、以下のコードでそれを分類できます。

switch $animal
    case cat
        echo evil
    case wolf dog human moose dolphin whale
        echo mammal
    case duck goose albatross
        echo bird
    case shark trout stingray
        echo fish
    # Note that the next case has a wildcard which is quoted
    case '*'
        echo I have no idea what a $animal is
end

上記のコードを $animalwhale をセットして実行すると、出力は mammal になります。

$animal に "banana" をセットした場合、 "I have no idea what a banana is" と表示されます。