我正在尝试为程序参数扩展并行内部的变量
例如 标签=影响力
ls *vcf | parallel -k -v 'bcftools query -f "%$TAG/n"'
应该扩展到哪里
ls *vcf | parallel -k -v 'bcftools query -f "%IMPACT/n"'
我尝试了我能想到的“”和“”的许多变体,但我总是得到
bcftools query -f %IMPACT/n
bcftools query -f '"%$TAG/n"'
或者其他类似的东西
bcftools query -f '"%"$TAG"\n"'
尝试了一些并行的变体,例如--shellquote,但没有组合成功并正确扩展(如果可能的话)
我尝试分隔 $TAG 内的所有内容 喜欢:
TAG="%IMPACT/n"
然后
ls *vcf | parallel -k -v 'bcftools query -f '"%$TAG/n"''
这可以工作,但是有没有办法在代码内部而不是外部扩展它?
正如我正在做的一个测试, 使用
ls *vcf | parallel -k -v 'bcftools +split-vep -f '"$TAG"' {} | tr '"$COMMA"' '"$SPACE"''
定义时
TAG='"%IMPACT/n"'
SPACE='"/n"'
COMMA='","'
扩展到:
bcftools +split-vep -f "%IMPACT/n" input.vcf | tr "," "/n"
由于
parallel
正在子进程中启动,请确保事先 export TAG
以确保 parallel
可以在运行时正确扩展 $TAG
:
$ export TAG
$ ls file?.vcf | parallel -k -v 'echo "%$TAG%"'
echo "%$TAG%" file1.vcf # $TAG not expanded by OS command line
%IMPACT% file1.vcf # TAG is exported so parallel is able to expand $TAG
echo "%$TAG%" file2.vcf
%IMPACT% file2.vcf
echo "%$TAG%" file3.vcf
%IMPACT% file3.vcf
或者,通过将
$TAG
脚本用双引号括起来,允许操作系统扩展 parallel
:
$ ls file?.vcf | parallel -k -v "echo '%$TAG%'"
echo '%IMPACT%' file1.vcf # $TAG expanded at OS command line
%IMPACT% file1.vcf
echo '%IMPACT%' file2.vcf
%IMPACT% file2.vcf
echo '%IMPACT%' file3.vcf
%IMPACT% file3.vcf
如果您需要保留内部双引号,请转义它们:
$ ls file?.vcf | parallel -k -v "echo \"%$TAG%\""
echo "%IMPACT%" file1.vcf # $TAG expanded at OS command line
%IMPACT% file1.vcf
echo "%IMPACT%" file2.vcf
%IMPACT% file2.vcf
echo "%IMPACT%" file3.vcf
%IMPACT% file3.vcf