次の方法で共有


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

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

引用符とスペースは Bash によって解釈されるため、次の 2 つの例は 正しくありません

形式が正しくありません 問題 コンソール出力
az {"key":"value"} --debug 単一引用符またはエスケープ文字が不足しています コマンド引数: ['{key:value}', '--debug']
az {"key": "value"} --debug 一重引用符またはエスケープ文字が不足しており、余分なスペースが含まれています。 コマンド引数: ['{key:', 'value}', '--debug']

JSON パラメーター値の操作の詳細については、「 Azure CLI で短縮構文を使用する方法」を参照してください。

空の文字列

  • 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 での 不適切なコマンド の 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 の比較の例については、「 Azure CLI コマンド出力のクエリ」を参照してください。

--debug パラメーター

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

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

スクリプト言語の規則

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

PowerShell の既知の問題により、いくつかの追加のエスケープ規則が適用されます。 詳細については、「 PowerShell スクリプト言語で Azure CLI を実行するための考慮事項」を参照してください。

こちらも参照ください

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