我总是用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