在这种情况下,使用 case 或 if 时最大的区别是什么?

在这种情况下,使用 case 或 if 时最大的区别是什么?

我总是用if这种类型的东西,我还没有真正想到它,但让我们说一些简单的事情,如下所示:

case $1 in
test)
echo "test"
;;
test2)
echo "test"
;;
test3
echo "test3"
esac

if [[ "$1" == "test" ]]
then
echo "test"
elif [[ "$1" == "test2" ]]
then
echo "test2"
elif [[ "$1" == "test3" ]]
then
echo "test3"
fi

这个案例中最大的差异是什么?客观上,他们中的任何一个更适合另一项任务吗?

答案1

case比较单个 shell 的值单词到任意数量的指定 shell模式 (如有)并执行相关的 shell列表 (如有)对于第一个发现匹配或根本没有匹配的。case评估单词并且每个关联模式直到第一个匹配仅一次。case返回任何已执行的 shell列表否则为 0。

if比较的值返回状态一些必需的外壳列表为 0 并随后执行所需的thenshell列表如果匹配,否则执行可选elifelseshell列表 (如有)if执行并评估至少一个 shell 的返回列表对于任何具有关联的 sif链中的每个语句if列表返回 0。

ifthen对于任何已执行或列表都返回else,否则返回 0,无论所需的ifshell是什么列表的回归。

答案2

在您的示例中case,针对一个变量测试多种模式。 有几个可以进行任何测试,包括针对变量的几种模式,但这只是一般. $1
if ... elifif ... elif

相关内容