Um case
testa vários padrões em relação a uma variável, $1
no seu exemplo.
Vários if ... elif
podem fazer qualquer teste, incluindo vários padrões contra uma variável, mas isso é apenas um caso especial do geral if ... elif
.
Eu sempre uso if
para esse tipo de coisa, e realmente não pensei nisso, mas vamos dizer algo simples assim:
case $1 in
test)
echo "test"
;;
test2)
echo "test"
;;
test3
echo "test3"
esac
vs.
if [[ "$1" == "test" ]]
then
echo "test"
elif [[ "$1" == "test2" ]]
then
echo "test2"
elif [[ "$1" == "test3" ]]
then
echo "test3"
fi
Quais são as maiores diferenças neste caso? Alguma delas é objetivamente melhor para outra tarefa?
Um case
testa vários padrões em relação a uma variável, $1
no seu exemplo.
Vários if ... elif
podem fazer qualquer teste, incluindo vários padrões contra uma variável, mas isso é apenas um caso especial do geral if ... elif
.
case
compara o valor de uma única shell word com qualquer número de padrões especificados (se houver) e executa o valor associado shell lista (se houver) para o primeiro deles encontrado para corresponder ou nada. case
avalia a palavra e cada padrão associado até a primeira correspondência, apenas uma vez. case
retorna para qualquer shell lista ou então 0.
if
compara o valor do status de retorno de alguns shell lista para 0 e subseqüentemente executa o then
shell lista se corresponder ou então executar a lista opcional elif
ou else
shell (se houver) . if
executa e avalia o retorno de pelo menos um shell lista para cada if
em qualquer cadeia de if
s com uma lista que retorne 0.
if
retorna para qualquer lista then
ou else
executada, ou então 0, independentemente da devolução do if
shell lista .