Bash不允许在case语句中使用if语句

use*_*078 3 bash

有人可以帮我找出我在这个bash脚本上做错了什么.我正在尝试使用if语句内部case语句和bash抱怨语法错误.

findinfo() {
OPT1=$1
case  "$OPT1" in
   linux)
        echo "Setting environment"
        ESC="hello_linux" if [[ "$PROJN" == "ONE" ||  "$PROJN" == "two" ]]
        ;;
   Windows)
        echo "Setting environment"
        ESC="hello_windows" if [[ "$PROJN" == "ONE" ||  "$PROJN" == "two" ]]
        ;;
   Android)
        echo "Setting environment"
        ESC="hello_android" if [[ "$PROJN" == "ONE" ||  "$PROJN" == "two" ]]
        ;;
esac

}
Run Code Online (Sandbox Code Playgroud)

谢谢

cho*_*oba 10

在bash中,if必须在then部分之前:

if [[ "$PROJN" == "ONE" ||  "$PROJN" == "two" ]] ; then ESC=hello_linux ; fi
Run Code Online (Sandbox Code Playgroud)

ifPerl中可以使用"后缀"(也可能在其他地方),但不能在bash中使用.

  • 需要是`ESC = hello_linux`,而不是`ESC = hello_linux`; 空格使这个命令`ESC`有两个参数,`=`和`hello_linux`. (4认同)

Cha*_*ffy 6

以下语法是替代方案:

[[ $PROJN = ONE || $PROJN = TWO ]] && ESC=hello_linux
Run Code Online (Sandbox Code Playgroud)

......以下内容仍然较短,并且符合较旧的外壳:

case $PROJN in ONE|TWO) ESC=hello_linux ;; esac
Run Code Online (Sandbox Code Playgroud)