スクリプト言語間の相違点の引用

Azure CLI コマンドを使用する場合は、スクリプト言語で引用符を使用して文字をエスケープする方法に注意してください。 異なるシェルで使用されるスクリプトをサポートしている場合は、引用の違いを理解すると、貴重な開発時間を節約できます。

単一引用符または二重引用符またはエスケープ文字を含むパラメーター値を使用して予期しない結果を回避するには、いくつかの推奨事項を次に示します。

空白と引用符

  • 空白を含むパラメーター値を指定する場合は、値を引用符で囲みます。

  • 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 コマンド プロンプトで実行する場合は、二重引用符を使用する必要があります。 Cmd.exeの上記の JSON 文字列と同等のものが "{"key":"value"}"

  • JSON 値に二重引用符が含まれている場合は、それらをエスケープする必要があります。

  • JSON パラメーター値を使用する場合は、Azure CLI の @<file> 規則を使用することを検討し、シェルの解釈メカニズムをバイパスします。

    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']

以下の 2 つの例は、引用符とスペースが 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 パラメーターがスペース区切りのリストを受け入れる場合は、次の 2 つの形式のいずれかが考えられます。

  • 引用符で囲まれていないスペース区切りリストの例: --parameterName firstValue secondValue

  • スペース区切りの引用符で囲まれたリストの例: --parameterName "firstValue" "secondValue"

次の例は、スペースを含む文字列です。 スペース区切りのリストではありません: --parameterName "firstValue secondValue"

特殊文字

PowerShell スクリプト言語には、 @などの特殊文字があります。 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 パラメーターを使用する場合、JMESPath の一部の文字をシェルでエスケープする必要があります。

Bash では、次の 3 つのコマンドは正しく、同等です。

az version --query '"azure-cli"'
az version --query \"azure-cli\"
az version --query "\"azure-cli\""

Bash の incorrect コマンド の 2 つの例を次に示します。

# 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 の比較の例については、「 Query Azure CLI コマンドの出力を参照してください。

--debug パラメーター

引用符の問題のトラブルシューティングを行う最善の方法は、--debug フラグを指定してコマンドを実行することです。 このフラグにより、Python の構文で Azure CLI が受け取る実際の引数が明らかになります。

--debugを使用した Azure CLI コマンドのトラブルシューティングの詳細については、「 Azure CLI のトラブルシューティングを参照してください。

スクリプト言語の規則

それぞれの組織によって発行されたスクリプト言語ルールへのクイック リンクを次に示します。

Note

PowerShell の既知の問題のため、いくつかの追加のエスケープ規則が適用されます。 詳細については、「 PowerShell スクリプト言語で Azure CLI を実行するためのコンサイドレーションを参照してください。

関連項目

スクリプト言語の比較については、次の記事を参照してください。