BASH:根据其他变量的开头设置变量(可能是多个值)

use*_*925 1 linux bash if-statement

我试图根据设置的内容设置$Environment变量$EnvironmentGroup.我认为结合until并且if可以工作,但我最终得到一个空变量.任何帮助表示赞赏:)

until [ -n $Environment ]
  do
    if [ $EnvironmentGroup -eq ^dev* ]
    then Environment=dev
    break
    fi
    if [ $EnvironmentGroup -eq ^sit* ]
    then Environment=sit
    break
    fi
    if [ $EnvironmentGroup -eq ^uat* ]
    then Environment=uat
    break
    fi
    if [ $EnvironmentGroup -eq ^prod* ]
    then Environment=prod
    break
    fi
done
Run Code Online (Sandbox Code Playgroud)

dev*_*ull 7

不确定until在这种情况下提示使用了什么.不过,你真的不需要这里的循环甚至是多个条件.您可以使用二元运算符=~:

[[ $EnvironmentGroup =~ ^(dev|sit|uat|prod) ]] && Environment="${BASH_REMATCH[1]}"
Run Code Online (Sandbox Code Playgroud)

这将Environment取决于EnvironmentGroup(4个给定选项中)的开头.

而且,你不能在测试中使用globs,即[条件.

引自手册:

与正则表达式中带括号的子表达式匹配的子字符串保存在数组变量中BASH_REMATCH.BASH_REMATCH索引为0 的元素 是匹配整个正则表达式的字符串部分.BASH_REMATCH索引n 的元素是与第n个带括号的子表达式匹配的字符串部分.