Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При работе с командами Azure CLI следует учитывать, как язык сценариев использует кавычки и экранирует символы. Если вы поддерживаете сценарии, используемые в разных оболочках, понимание различий в кавычках экономит ценные часы в процессе разработки.
Чтобы избежать непредвиденных результатов со значениями параметров, содержащими одинарные или двойные кавычки, или escape-символы, ниже приведены некоторые варианты.
Пробелы и кавычки
Если вы указываете значение параметра, которое содержит пробелы, оберните значение в кавычки.
В Bash и PowerShell, если значение переменной содержит одинарные кавычки, заключите значение в двойные кавычки и наоборот.
В Bash двойные кавычки, которые экранируются, обрабатываются как часть строки.
В командной строке Windows кавычки внутри переменных обрабатываются как часть значения.
Вот несколько таких случаев.
# Correct
myVariable="my string ' ' wrapped in double quotes"
myVariable='my string " " wrapped in single quotes'
myVariable="my string with escaped \" \" double quotes wrapped in double quotes"
# Wrong, escaped single quotes in Bash are not treated as part of the string
myVariable='my value with escaped \' \' single quotes wrapped in single quotes'
# after each example ...
echo $myVariable
Выходные данные Bash для правильных примеров приведены следующим образом:
my string ' ' wrapped in double quotes
my string " " wrapped in single quotes
my string with escaped " " double quotes wrapped in double quotes
Если вы хотите включить кавычки в выходные данные, экранируйте переменную следующим образом: echo \"$myVariable\"
.
echo \"$myVariable\"
"my string ' ' wrapped in double quotes"
echo \'$myVariable\'
'my string " " wrapped in single quotes'
echo \"$myVariable\"
"my string with escaped " " double quotes wrapped in double quotes"
Строки JSON
Используйте одинарные кавычки, чтобы сохранить содержимое внутри строки JSON. При предоставлении встроенных значений JSON необходимы одинарные кавычки. Например, этот КОД JSON правильно используется как в Bash, так и в PowerShell:
'{"key": "value"}'
Если команда выполняется в командной строке Windows, необходимо использовать двойные кавычки. Эквивалентом приведенной выше строки JSON в Cmd.exe является
"{"key":"value"}"
.Если значение JSON содержит двойные кавычки, их необходимо экранировать.
При работе со значениями параметров JSON рекомендуется использовать соглашение Azure CLI
@<file>
и обойти механизмы интерпретации оболочки.az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
Ниже приведены принятые шаблоны формата JSON для Bash, PowerShell и Cmd:
Используйте команду Bash clear
для удаления выходных данных консоли между тестами.
# Correct in Bash
az '{"key":"value"}' --debug
>> Command arguments: ['{"key":"value"}', '--debug']
az "{\"key\":\"value\"}" --debug
>> Command arguments: ['{"key":"value"}', '--debug']
Следующие два примера неверны, так как кавычки и пробелы интерпретируются Bash.
Неправильный формат | Проблема | Вывод на консоль |
---|---|---|
az {"key":"value"} --debug | Отсутствуют одиночные кавычки или escape-символы | Аргументы командной строки: ['{key:value}', '--debug'] |
az {"key": "value"} --debug | Отсутствующие одинарные кавычки или escape-символы и содержат дополнительное пространство | Аргументы командной строки: ['{key:', 'value}', '--debug'] |
Дополнительные сведения о работе со значениями параметров JSON см. в разделе "Использование сокращенного синтаксиса с помощью Azure CLI".
Пустые строки
В PowerShell, если значение является пустой строкой кавычки (
''
), используйте'""'
.В Bash или PowerShell, если значение является пустой строкой кавычки (
''
), используйте"''"
.# Correct in Bash myVariable="''" # Correct in PowerShell $myVariable = "''" $myVariable = '""'
Значения, разделенные пробелами
Некоторые команды Azure принимают список значений, разделенных пробелами. Если имя ключа или значение содержат пробелы, заключите в кавычки всю пару: "my key=my value"
. Например:
az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"
Если параметр CLI утверждает, что принимает разделенный пробелами список, ожидается один из таких двух форматов:
Пример неквотированного списка, разделенного пробелами:
--parameterName firstValue secondValue
Пример списка, разделенного пробелами:
--parameterName "firstValue" "secondValue"
Этот пример представляет собой строку с пробелом в ней. Это не разделенный пробелами список: --parameterName "firstValue secondValue"
Специальные символы
Существуют специальные символы на языке сценариев PowerShell, например в @
. Чтобы выполнить Azure CLI в PowerShell, добавьте `
перед специальным символом, чтобы экранировать его. Вы также можете заключить значение в одинарные или двойные кавычки "
/"
.
# The following three examples will work in PowerShell
--parameterName `@parameters.json
--parameterName '@parameters.json'
--parameterName "@parameters.json"
# This example will not work in PowerShell
--parameterName @parameters.json
Символы дефиса
Если значение параметра начинается с дефиса, Azure CLI пытается анализировать его как имя параметра. Чтобы проанализировать его как значение, используйте =
для сцепления имения параметра со значением: --password="-VerySecret"
.
Параметр --query
Если вы используете в команде параметр --query
, некоторые символы JMESPath нужно экранировать в оболочке.
Следующие три команды в Bash корректны и эквивалентны:
az version --query '"azure-cli"'
az version --query \"azure-cli\"
az version --query "\"azure-cli\""
Ниже приведены два примера неправильных команд в Bash:
# Wrong, as the dash needs to be quoted in a JMESPath query
az version --query azure-cli
az version: error: argument --query: invalid jmespath_type value: 'azure-cli'
# Wrong, as the dash needs to be quoted in a JMESPath query, but quotes are interpreted by Bash
az version --query "azure-cli"
az version: error: argument --query: invalid jmespath_type value: 'azure-cli'
Дополнительные примеры сравнения между Bash, PowerShell и Cmd см. в статье "Запрос выходных данных команды Azure CLI".
Параметр --debug
Лучший способ устранить проблему с кавычками — выполнить команду с флагом --debug
. Этот флаг позволяет отобразить реальные полученные аргументы Azure CLI с использованием синтаксиса Python.
Дополнительные сведения об устранении неполадок с --debug
командами Azure CLI см. в статье "Устранение неполадок Azure CLI".
Правила языка сценариев
Ниже приведены краткие ссылки на правила языка сценариев, опубликованные соответствующими организациями:
- Язык скриптов Bash: правила кворирования Bash
- Язык сценариев PowerShell: правила кворирования PowerShell
- Командная строка Windows: Как использовать escape-символы, разделители и кавычки в командной строке Windows
Примечание.
Из-за известной проблемы в PowerShell применяются дополнительные правила экранирования. Дополнительные сведения см. в разделе "Рекомендации по запуску Azure CLI" на языке сценариев PowerShell.
См. также
Дополнительные сравнения языка сценариев см. в следующих статьях: