问题描述
我正在通过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