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

如何在parallel命令的程序参数中实现变量扩展?

解决parallel命令中shell变量的扩展问题

核心需求:定义TAG=IMPACT后,让parallel执行的命令里%$TAG被扩展为%IMPACT。

两种可行方案:

  1. 用双引号包裹parallel的命令串
    利用shell对双引号内变量的扩展特性,同时转义命令内部的双引号避免解析冲突:

    TAG=IMPACT
    ls *vcf | parallel -k -v "bcftools query -f \"%${TAG}/n\""
    

    shell会先扩展${TAG},最终传给parallel的命令就是bcftools query -f "%IMPACT/n"。

  2. 拆分单引号与双引号拼接变量
    将需要扩展的变量部分从单引号中分离,用双引号包裹变量,让shell先完成扩展再拼接整个命令串:

    TAG=IMPACT
    ls *vcf | parallel -k -v 'bcftools query -f "%'"${TAG}"'/n"'
    

    这里的拼接逻辑是:单引号内容'%' + 双引号扩展后的IMPACT + 单引号内容'/n"',最终组合成目标字符串。

关于你之前测试成功的原因

你之前的命令'bcftools +split-vep -f ' "$TAG" ' {} | tr ' "$COMMA" ' ' "$SPACE"''能成功,本质是把需要扩展的变量用独立的双引号包裹,当前shell会先扩展$TAG、$COMMA、$SPACE,再将所有片段拼接成完整命令传给parallel,和上面第二种方案的逻辑一致。

内容的提问来源于stack exchange,提问作者Gabriel G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:33:10