スイッチに2つのケースを実行させる方法は?
次のコードで試しましたが、最初のケースのみを実行します
#!/bin/sh
action="titi"
case "$action" in
toto|titi)
echo "1_$action"
;;
tata|titi)
echo "2_$action"
;;
esac
スイッチに2つのケースを実行させる方法は?
次のコードで試しましたが、最初のケースのみを実行します
#!/bin/sh
action="titi"
case "$action" in
toto|titi)
echo "1_$action"
;;
tata|titi)
echo "2_$action"
;;
esac
case
bashのステートメントは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
titi
パターンが一致しない場合に実行するデフォルト値を検討してください
#!/bin/sh
action="titi"
case "$action" in
toto)
echo "1_$action"
;;
tata)
echo "2_$action"
;;
*)
echo "1_$action"
echo "2_$action"
esac
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