web-dev-qa-db-ja.com

ARMテンプレートで一重引用符をエスケープする方法

AzureRMテンプレートに次のリソースがある場合、commandToExecute部分の単一引用符をどのようにエンコードしますか?

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "name": "[concat(variables('vmNameMaster'), copyIndex(), '/sethost')]",
  "apiVersion": "2015-06-15",
  "location": "[resourceGroup().location]",
  "copy": {
      "name": "extensionLoopNode",
      "count": "[variables('masterCount')]"
  },
  "dependsOn": [
      "[concat('Microsoft.Compute/virtualMachines/', variables('vmNameMaster'), copyIndex(),'/extensions/DockerExtension')]"
  ],
  "properties": {
    "publisher": "Microsoft.OSTCExtensions",
    "type": "CustomScriptForLinux",
    "typeHandlerVersion": "1.4",
    "settings": {
      "fileUris": [ ],
      "commandToExecute": "[concat('/bin/bash -c \'echo \"export DOCKER_Host=:2375\" >> /home/', parameters('adminUsername') ,'/.profile\'')]",
      "timestamp": 123456789
    }
  }
},
21

私はこれを変数で回避しました:

"variables": {
    "singleQuote": "'",
},
...
"settings": {
    "fileUris": [],
    "commandToExecute": "[concat('/bin/bash -c ', variables('singleQuote'), 'echo \"export DOCKER_Host=:2375\" >> /home/', parameters('adminUsername') ,'/.profile', variables('singleQuote'))]",
}

エレガントではありませんが、機能します。

15

Azure ARM関数は、VB文字列と同じ方法でエスケープします。つまり、一重引用符を2倍にするだけです。

[concat('This is a ''quoted'' Word.')]

出力

This is a 'quoted' Word.

二重引用符はJSONからエスケープする必要があります。

 [concat('''single'' and \"double\" quotes.')]

出力

'single' and "double" quotes.
32
Eric Cote

DevOpsリリースパイプラインでは、APIMポリシーについて、使用して引用します。式内の引用符をエスケープするには、

<when condition='@(context.Variables.GetValueOrDefault&lt;bool&gt;(&quot;isAuthOk&quot;))' />
0
usman shaheen