基于环境变量的条件赋值

Jon*_*nik 19 bash shell-script environment-variables assignment

在 bash 脚本中,我分配了一个局部变量,以便该值取决于外部的全局环境变量 ( $MYAPP_ENV)。

if [ "$MYAPP_ENV" == "PROD" ]
then
    SERVER_LOGIN=foobar123@prod.example.com
else
    SERVER_LOGIN=foobar987@test.example.com
fi
Run Code Online (Sandbox Code Playgroud)

是否有更短(但干净)的方式来编写上述作业?(大概使用某种条件运算符/内联 if。)

slm*_*slm 27

您还可以使用 case/switch inbash来执行此操作:

case "$MYAPP_ENV" in
 PROD) SERVER_LOGIN="foobar123@prod.example.com" ;;
    *) SERVER_LOGIN="foobar987@test.example.com" ;;
esac
Run Code Online (Sandbox Code Playgroud)

或者这个方法:

[ "$MYAPP_ENV" = PROD ] &&
   SERVER_LOGIN=foobar123@prod.example.com ||
   SERVER_LOGIN=foobar987@test.example.com
Run Code Online (Sandbox Code Playgroud)

  • case 语句比将其全部塞在一行中更具可读性(如果第二个命令失败,则可能以灾难告终,在这种情况下,这很好,但养成这种习惯可能代价高昂)。这是处理此类情况的最佳方法。 (2认同)
  • @Jonik - 这也是我的发现。相信我,我一直在寻找替代方案,我更喜欢做很多事情的宽线而不是长程序,而且 if/then/else 对于我的口味来说也非常冗长。 (2认同)

cuo*_*glm 10

尝试:

[ condition ] && var=value_when_true || var=value_when_false
Run Code Online (Sandbox Code Playgroud)

如果您的赋值是数字,则可以使用bash三元运算:

(( assign_condition ? value_when_true : value_when_false ))
Run Code Online (Sandbox Code Playgroud)


MBR*_*MBR 7

您可以使用&&||运算符

[ "$MYAPP_ENV" == "PROD" ] && SERVER_LOGIN=foobar123@prod.example.com || SERVER_LOGIN=foobar987@test.example.com
Run Code Online (Sandbox Code Playgroud)