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

Groovy如何实现变量存储表达式动态执行(等价Invoke-Expression)

原因

你当前的写法只是把代码文本作为字符串赋值给了变量,直接引用变量只会返回字符串本身,不会将字符串内容解析为Groovy代码执行,因此不会触发目录创建逻辑。

Groovy 等价 Invoke-Expression 的实现

Groovy 原生提供了动态执行字符串代码的能力,和PowerShell的Invoke-Expression功能完全对齐,常用实现有两种:

  • 轻量单表达式执行:使用Eval.me()方法,适合无额外上下文的简单代码执行,对应你的需求修改后的可运行代码如下:
def createDir = 'new File("new").mkdir()'
// 执行字符串内的代码,返回执行结果
def createSuccess = Eval.me(createDir)
println createSuccess // 目录创建成功会输出true
  • 带上下文的灵活执行:使用GroovyShell,支持给执行环境绑定自定义变量,适配更复杂的动态代码场景:
def shell = new GroovyShell()
// 绑定执行上下文中的变量
shell.setVariable("targetDir", "new")
def createDirCode = 'new File(targetDir).mkdirs()'
shell.evaluate(createDirCode)
更优实践

如果不是强需求必须用字符串存储代码,优先用闭包存储可执行逻辑,没有代码注入风险,类型校验更可靠,执行性能也更高:

// 将逻辑封装在闭包中存储
def createDir = { new File("new").mkdir() }
// 调用闭包执行逻辑
createDir.call()

注意:动态执行字符串代码存在代码注入风险,禁止将外部不可信输入拼接到待执行的代码字符串中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:33:38