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

如何在xonsh子进程调用中正确展开shell变量

解决方案

你需要使用xonsh的Python表达式注入语法@()包裹变量,才能在子进程调用中正确展开Python侧定义的变量。

正确的代码修改

将你脚本中变量调用的行修改为如下格式即可,甚至不需要额外把Path对象转成字符串:

#!/usr/bin/env xonsh

from pathlib import Path

my_path = Path('/path/to/downloads/')

dir_list = my_path.glob('*.zip')
for my_zip in dir_list:
  zip_dir_names = $(zipinfo -1 @(my_zip) | grep -E '.*/$')
  print(zip_dir_names)

错误写法原因说明

你之前尝试的几种写法不符合xonsh的语法规则,因此无法正常展开:

  • 直接写mzip_str:会把mzip_str作为字面量字符串传给命令,而非变量值
  • 写$mzip_str:$前缀在子进程块中默认指向环境变量,不会读取你定义的Python局部变量
  • 写@mzip_str:@注入运算符必须搭配括号使用,仅写@变量名不会触发展开,会直接把@mzip_str作为字面量传参
  • 写!mzip_str:!是宏展开运算符,不符合当前变量传参的使用场景,无法识别局部变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:30:03