スクリプト言語間の相違点の引用
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 のトラブルシューティングを参照してください。
スクリプト言語の規則
それぞれの組織によって発行されたスクリプト言語ルールへのクイック リンクを次に示します。
- Bash スクリプト言語: 引用符で囲む規則
- PowerShell スクリプト言語: PowerShell クォートルール
- Windows コマンド プロンプト: 方法: Windows コマンド ラインで文字、区切り記号、引用符をエスケープする
Note
PowerShell の既知の問題のため、いくつかの追加のエスケープ規則が適用されます。 詳細については、「 PowerShell スクリプト言語で Azure CLI を実行するためのコンサイドレーションを参照してください。
関連項目
スクリプト言語の比較については、次の記事を参照してください。
Azure CLI