如何在parallel命令的程序参数中实现变量扩展?
解决parallel命令中shell变量的扩展问题
核心需求:定义TAG=IMPACT后,让parallel执行的命令里%$TAG被扩展为%IMPACT。
两种可行方案:
用双引号包裹parallel的命令串
利用shell对双引号内变量的扩展特性,同时转义命令内部的双引号避免解析冲突:TAG=IMPACT ls *vcf | parallel -k -v "bcftools query -f \"%${TAG}/n\""shell会先扩展
${TAG},最终传给parallel的命令就是bcftools query -f "%IMPACT/n"。拆分单引号与双引号拼接变量
将需要扩展的变量部分从单引号中分离,用双引号包裹变量,让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.
相关产品推荐
相关产品推荐

