空格分隔值;如何提供包含空格的值

2024-04-27

我正在创建一个 bash 脚本来通过以下方式配置多个 Azure 资源Azure CLI https://learn.microsoft.com/en-us/cli/azure/?view=azure-cli-latest。到目前为止一切顺利,但是我在标记资源时遇到问题。

我的目标是将多个标签存储在一个变量中,并将该变量提供给多个标签的 --tags 选项az脚本中的命令。然而问题是值中的空格将被解释​​为新键。

如果我们以命令为例az group update(这将更新资源组)docs https://learn.microsoft.com/en-us/cli/azure/group?view=azure-cli-latest#az-group-update关于 --tags 选项,请说明以下内容:

--tags'key[=value]' 格式的空格分隔标签。使用“”清除现有标签。

当值(或键)包含空格时,必须将其括在引号中。 因此,当我们直接向命令提供键值对(包括带空格的值)时(如下例所示),结果将符合预期:

az group update --tags owner="FirstName LastName" application=coolapp --name resource-group-name

结果将是两个标签已添加到资源组中:

{
  "id": "/subscriptions/1e42c44c-bc55-4b8a-b35e-de1dfbcfe481/resourceGroups/resource-group-name",
  "location": "westeurope",
  "managedBy": null,
  "name": "resource-group-name",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": {
    "application": "coolapp",
    "owner": "FirstName LastName"
  }
}

但是,当我们将上一步中使用的相同值存储在变量中时,就会出现问题。

tag='owner="FirstName LastName" application=coolapp'

I use echo $tag验证变量包含与我们在上一个示例中为 --tags 选项提供的值完全相同的值:

owner="FirstName LastName" application=coolapp

但是,当我们将此标签变量提供给命令的标签选项时,如下一行所示:

az group update --tags $tag --name resource-group-name

结果将是三个标签,而不是预期的两个:

{
  "id": "/subscriptions/1e42c44c-bc55-4b8a-b35e-de1dfbcfe481/resourceGroups/resource-group-name",
  "location": "westeurope",
  "managedBy": null,
  "name": "resource-group-name",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": {
    "LastName\"": "",
    "application": "coolapp",
    "owner": "\"FirstName"
  }
}

我已经尝试通过以下方式定义变量,但到目前为止还没有运气:

tag="owner=FirstName LastName application=coolapp"
tag=owner="Firstname Lastname" application=cool-name
tag='`owner="Firstname Lastname" application=cool-name`'

我什至尝试将变量定义为数组并将其提供给下一行所示的命令,但也没有提供正确的结果:

tag=(owner="Firstname Lastname" application=cool-name)

az group update --tags ${tag[*]}--name resource-group-name

我还尝试按照 @socowi 的建议在命令中的变量周围加上引号,但这会导致以下错误结果:一个标签而不是两个标签:

az group update --tags "$tag" --name resource-group-name

{
  "id": "/subscriptions/1e42c44c-bc55-4b8a-b35e-de1dfbcfe481/resourceGroups/resource-group-name",
  "location": "westeurope",
  "managedBy": null,
  "name": "resource-group-name",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": {
    "owner": "Firstname Lastname application=cool-name"
  }
}

有人知道如何解决这个问题吗?


将您的标签定义为

tags=("owner=Firstname Lastname" "application=cool-name")

then use

--tags "${tags[@]}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

空格分隔值;如何提供包含空格的值 的相关文章