You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible中避免字符串添加额外双引号及移除现有双引号

解决Ansible中UninstallString路径多余双引号的问题

你遇到的问题是因为out.stdout_lines.0本身已经包含双引号,而在set_fact中用双引号包裹变量时,Ansible会保留原字符串的引号,再加上外层的引号,导致嵌套双引号。下面是几种可行的解决方法:

方法1:用正则替换过滤器精准移除首尾双引号

这是最可靠的处理方式,通过regex_replace过滤器只去掉字符串首尾的双引号,不会影响路径中间可能存在的合法字符:

- set_fact:
    uninstall_filePath: "{{ out.stdout_lines.0 | regex_replace('^\"|\"$', '') }}"
- debug: var=uninstall_filePath

执行后你会得到干净的可直接使用的路径:

ok: [Myremotehost] => {
    "uninstall_filePath": "C:\\Program Files (x86)\\InstallShield Installation Information\\{584775F9-1696-4387-AEB5-86171F6567CC}\\Setup-x64.5.0.1.8009.exe"
}

方法2:从源头处理,在PowerShell命令中移除引号

直接修改win_shell的命令,在获取UninstallString时就去掉首尾引号,后续赋值无需额外处理,从根源避免问题:

win_shell: |
  $uninstallEntry = Get-ItemProperty HKLM:Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | `
                    Where-Object { $_.DisplayName -match '{{product_name}}' }
  if ($uninstallEntry) {
      $uninstallEntry.UninstallString -replace '^"|"$', ''
  }
register: out

- set_fact:
    uninstall_filePath: "{{ out.stdout_lines.0 }}"

方法3:用replace过滤器替换所有双引号

如果确定路径中间不会出现双引号,也可以直接全局替换掉所有双引号:

- set_fact:
    uninstall_filePath: "{{ out.stdout_lines.0 | replace('\"', '') }}"

内容的提问来源于stack exchange,提问作者Samselvaprabu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:14:43