在zsh中,如何为多个键值导出使用单个导出名称基于环境?

问题描述

我正在使用zsh,并且将我的aws env导出到zshrc文件中,如下所示:

export AWS_ACCESS_Development = 1234
export AWS_SECRET_Development = 1234

export AWS_ACCESS_Production = 1234
export AWS_SECRET_Production = 1234

我需要具有多个环境,因此当我针对不同的环境运行命令时,我可以轻松地仅使用环境名称,而不使用所有的KEY-SECRET:

ENV-1:
export AWS_ACCESS_Development = 1234
export AWS_SECRET_Development = 1234

ENV-2:
export AWS_ACCESS_Development = 1234
export AWS_SECRET_Development = 1234

解决方法

有可能,但是语法并不精确。

在通用编程语言中,您会将环境建模为关联数组,其中键是环境ID(在您的情况下为ENV-1,ENV-2),值又是关联数组,其中键是ACCESS或SECRET,值是相应的开发编号。

AFIK,Zsh不提供嵌套的关联数组(至少在我正在使用的5.5.1版本中不提供),但是您可以用间接变量名引用替换数组级别之一。

假设您将环境定义为关联数组

 declare -A env1 env2
 env1=( [ACCESS]=1234 [SECRET]=2345 )
 env2=( [ACCESS]=3456 [SECRET]=4567 )

使用变量env作为常规环境访问器。如果您知道自己在环境1中,请设置

 env=env1

然后您可以通过以下方式访问此SECRET值(例如)

 secret_development=${${(P)env}[SECRET]}

(P)关心间接的地方。试图在此扩展表达式中添加一些空白以提高可读性是很诱人的,但不要这样做。该表达式将无效。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...