4

スイッチに2つのケースを実行させる方法は?

次のコードで試しましたが、最初のケースのみを実行します

#!/bin/sh
action="titi"

case "$action" in
    toto|titi)
    echo "1_$action"
    ;;
    tata|titi)
    echo "2_$action"
    ;;
esac
4

4 に答える 4

11

casebashのステートメントはCOMMAND-LIST、最初の一致に対してのみコマンドを実行します。

ただし、bash version 4以降は;&ターミネーターを導入。;;&演算子は に似ていますが、関連付けられたリストの実行後に case ステートメントが終了しない点が異なります;;。Bash は、前のパターンが一致しなかったかのように、次のパターンのテストを続行します。これらのターミネータを使用すると、case ステートメントを構成して、すべてのパターンに対してテストしたり、ブロック間でコードを共有したりすることができます。

参照: http://wiki.bash-hackers.org/syntax/ccmd/caseからの抜粋

したがって、これがあればbash v 4 or later、望ましい結果が得られます。

#!/bin/sh
action="titi"

case "$action" in
    toto|titi)
    echo "1_$action"
    ;;&
    tata|titi)
    echo "2_$action"
    ;;
esac
于 2013-07-17T13:53:29.323 に答える
1

titiパターンが一致しない場合に実行するデフォルト値を検討してください

#!/bin/sh
action="titi"

case "$action" in
    toto)
    echo "1_$action"
    ;;
    tata)
    echo "2_$action"
    ;;
    *)
    echo "1_$action"
    echo "2_$action"
esac
于 2013-07-17T13:22:11.533 に答える
0

2 回使用するifと、2 回一致します。

if [ "$action" = 'toto' -o "$action" = 'titi' ]; then
    echo "1_$action"
fi
if [ "$action" = 'tata' -o "$action" = 'titi' ]; then
    echo "2_$action"
fi

を使用する必要がある場合は、使用してみてcaseはいかがですかfunction

function f1
{
    echo "1_$action"
}

function f2
{
    echo "2_$action"
}

case "$action" in
    titi)
    f1
    f2
    ;;
    toto)
    f1
    ;;
    tata)
    f2
    ;;
esac
于 2013-07-17T13:18:06.627 に答える