Значения, разделенные пробелом; как предоставить значение, содержащее пробел - PullRequest
0 голосов
/ 17 ноября 2018

Я создаю сценарий bash для предоставления нескольких ресурсов Azure с помощью Azure CLI . Пока все хорошо, но у меня проблема с маркировкой ресурсов.

Моя цель - сохранить несколько тегов в переменной и предоставить эту переменную для опции --tags нескольких az команд в сценарии. Однако проблема в том, что пробел в значении будет интерпретироваться как новый ключ.

Если мы возьмем, например, команду az group update (которая обновит группу ресурсов), docs сообщит следующее о опции --tags:

--tags Разделенные пробелами теги в формате «ключ [= значение]». Используйте "", чтобы очистить существующие теги.

Когда значение (или ключ) содержит пробелы, оно должно быть заключено в кавычки. Поэтому, когда мы предоставляем пары ключ-значение непосредственно команде, включая значение с пробелами, как в следующем примере, результат будет таким, как ожидалось:

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'

Я использую 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"
  }
}

Кто-нибудь знает, как это решить?

1 Ответ

0 голосов
/ 17 ноября 2018

Определите ваши теги как

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

затем используйте

--tags "${tags[@]}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...