你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
引用脚本语言之间的差异
使用 Azure CLI 命令时,请注意脚本语言如何使用引号和转义字符。 如果支持在不同 shell 中使用的脚本,了解引用差异可节省宝贵的开发时间。
若要避免具有包含单引号或双引号的参数值或转义字符的意外结果,下面是一些建议:
空格和引号
如果提供包含空格的参数值,请将值包装在引号中。
在 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 值时,需要使用单引号。 例如,在 Bash 和 PowerShell 中,此 JSON 是正确的:
'{"key": "value"}'
。如果命令在 Windows 命令提示符上运行,则必须使用双引号。 Cmd.exe中上述 JSON 字符串的等效项为
"{"key":"value"}"
。如果 JSON 值包含双引号,则必须对其进行转义。
使用 JSON 参数值时,请考虑使用 Azure CLI 的
@<file>
约定并绕过 shell 的解释机制。az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
下面是 Bash、PowerShell 和 Cmd 的接受 JSON 格式模式:
使用 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 | 缺少单引号或转义字符 | Command arguments: ['{key:value}', '--debug'] |
az {"key": "value"} --debug | 缺少单引号或转义字符,并包含额外的空格 | Command arguments: ['{key:', 'value}', '--debug'] |
空字符串
在 PowerShell 中,如果值为空引号字符串 (
''
),请使用'""'
。在 Bash 或 PowerShell 中,如果值为空引号字符串(
''
),请使用"''"
。# Correct in Bash myVariable="''" # Correct in PowerShell $myVariable = "''" $myVariable = '""'
空格分隔值
某些 Azure CLI 命令采用以空格分隔的值列表。 如果密钥名称或值包含空格,则将整对引起来:"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 脚本语言中存在特殊字符,例如 at @
。 若要在 PowerShell 中运行 Azure CLI,请在特殊字符之前添加 `
以对其进行转义。 你也可以将值括在单引号或双引号 "
/"
中。
# 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
参数与命令一起使用时,需要在 shell 中对 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 语法中接收到的实际参数。
有关使用 Azure CLI 命令 --debug
进行故障排除的详细信息,请参阅 Azure CLI 故障排除。
脚本语言规则
下面是其各自组织发布的脚本语言规则的快速链接:
- Bash 脚本语言: Bash 引用规则
- PowerShell 脚本语言: PowerShell 引用规则
- Windows 命令提示符:操作说明: Windows 命令行中的转义字符、分隔符和引号
注意
由于 PowerShell 的已知问题,因此需要应用一些额外的转义规则。 有关详细信息,请参阅 使用 PowerShell 脚本语言运行 Azure CLI 的注意事项。
另请参阅
在以下文章中找到更多脚本语言比较: