问题描述
我正在使用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)
关心间接的地方。试图在此扩展表达式中添加一些空白以提高可读性是很诱人的,但不要这样做。该表达式将无效。