你当前正在访问 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 故障排除。

脚本语言规则

下面是其各自组织发布的脚本语言规则的快速链接:

注意

由于 PowerShell 的已知问题,因此需要应用一些额外的转义规则。 有关详细信息,请参阅 使用 PowerShell 脚本语言运行 Azure CLI 的注意事项。

另请参阅

在以下文章中找到更多脚本语言比较: