替代多个if-else-if条件

时间:2018-11-01 23:57:17

标签: bash

我知道这是一个非常新手的查询,但是在将多条if-else语句单行转换为一元时,我无法弄清楚哪里出了错。

下面是if-else片段:

if [[ ${ENVT} == "right" ]]
then
isRight
else
if [[ ${ENVT} == "left" ]]
then
isLeft
else
if [[ ${ENVT} == "middle" ]]
then
isMiddle
else
if [[ ${ENVT} == "level" ]]
then
isLevel
fi
fi
fi
fi

每个if条件检查都在调用其各自的功能。这是我尝试进行的转换:

(( ${ENVT} == "right" ? isRight : ${ENVT} == "left" ? isLeft : ${ENVT} == "middle" ? isMiddle : ${ENVT} == "level" ? isLevel : exit ))

我在哪里做错了什么指针?

2 个答案:

答案 0 :(得分:1)

这不是您要尝试的那种衬板,但是我发现此语法不错且紧凑,几个月后再回到它时非常容易理解。

#!/bin/bash
[[ ${ENVT} == "right" ]] && isRight
[[ ${ENVT} == "left" ]] && isLeft
[[ ${ENVT} == "middle" ]] && isMiddle
[[ ${ENVT} == "level" ]] && isLevel

答案 1 :(得分:1)

好吧,如果我们要打高尔夫球:

$(command -v "is${ENVT^}"

它大写变量,在is前面加上,并且仅在它是有效命令时才运行结果。