![在这种情况下,使用 case 或 if 时最大的区别是什么?](https://linux22.com/image/82825/%E5%9C%A8%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E4%BD%BF%E7%94%A8%20case%20%E6%88%96%20if%20%E6%97%B6%E6%9C%80%E5%A4%A7%E7%9A%84%E5%8C%BA%E5%88%AB%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我总是用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 并随后执行所需的then
shell列表如果匹配,否则执行可选elif
或else
shell列表 (如有)。if
执行并评估至少一个 shell 的返回列表对于任何具有关联的 sif
链中的每个语句if
列表返回 0。
if
then
对于任何已执行或列表都返回else
,否则返回 0,无论所需的if
shell是什么列表的回归。
答案2
在您的示例中case
,针对一个变量测试多种模式。 有几个可以进行任何测试,包括针对变量的几种模式,但这只是一般. $1
if ... elif
if ... elif