如何在ARM模板中转义单引号

Pou*_*sen 18 azure azure-resource-manager

给定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
    }
  }
},
Run Code Online (Sandbox Code Playgroud)

Eri*_*ote 36

您以与VB字符串相同的方式转义Azure ARM函数:您只需将单引号字符加倍.

[concat('This is a ''quoted'' word.')]
Run Code Online (Sandbox Code Playgroud)

输出

This is a 'quoted' word.
Run Code Online (Sandbox Code Playgroud)

双引号仍然需要从JSON转义.

 [concat('''single'' and \"double\" quotes.')]
Run Code Online (Sandbox Code Playgroud)

输出

'single' and "double" quotes.
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,因为目前接受的答案并不优雅. (5认同)
  • 不幸的是,Visual Studio 会将其视为错误:需要逗号。它可能有效,但您必须忽略红色波浪线。很多人会觉得这是无法接受的。 (2认同)
  • 这对我不起作用。所以我不得不求助于不太优雅的解决方案:) (2认同)

Jas*_*ome 15

我用变量解决了这个问题:

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

它不优雅,但它的工作原理.

  • 当''''是时,这如何回答? (5认同)