并行变量扩展输出到引号内的参数

问题描述 投票:0回答:1

我正在尝试为程序参数扩展并行内部的变量

例如 标签=影响力

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"
bash gnu-parallel variable-expansion
1个回答
0
投票

由于

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
© www.soinside.com 2019 - 2024. All rights reserved.