期望属性名称用双引号引起来-AWS CLI错误

问题描述

我正在通过teamcity步骤在bash脚本中运行以下awscli命令

 #!/bin/bash 
  repo=%env.RepoName%
  echo "repo is ${repo}"
  tags=%env.Tags%
  echo "tags are ${tags}"
  aws ecr create-repository --repository-name ${repo} --tags '${tags}'

其中%env.RepoName%%env.Tags%是团队性变量,其值分别为sample-repo[{"Key":"env","Value":"dev"},{"Key":"dept","Value":"finance"}]。但是,当aws cli命令运行时,它会错误显示以下错误

Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

但是,如果我用单引号将%env.Tags%的值传递为'[{"Key":"env","Value":"finance"}]',并从aws cli命令的tags属性中排除了'',它将运行没有问题。

我想念的是什么?有没有建议的方法解决这个问题?

解决方法

一种方法是通过使用\将双引号转义来保留双引号。您可能需要写sed来做到这一点:

tags="[{\"Key\":\"env\",\"Value\":\"dev\"},\"Key\":\"dept\",\"Value\":\"finance\"}]"

完成后,使用echo验证命令以检查引号是否保留。

echo aws ecr create-repository --repository-name ${repo} --tags "${tags}"                         
aws ecr create-repository --repository-name sample-repo --tags [{"Key":"env","Value":"dev"},{"Key":"dept","Value":"finance"}]

另一种方法是使用简写语法。如果可以分别获取标记键/值,则此语法看起来更简洁。

aws ecr create-repository --repository-name ${repo} --tags Key=env,Value=dev Key=dept,Value=finance

相关问答

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