在执行读取文本文件的循环时,如何解决歧义重定向?

时间:2019-01-30 11:05:15

标签: bash

尝试通过文件列表执行命令时,我得到错误的歧义重定向。我已经测试了该命令在逐个循环执行文件时可以很好地工作。

for i in "file1.vcf" "file2.vcf"
do
  grep -e "#" -e "PASS" /home/hpz440/Documents/P/example/input/$i > /home/hpz440/Documents//example/output/$i'_PASS'.vcf
  echo $i
done

现在,由于我有成千上万个文件输入,因此我想将所有文件的路径都放在列表中。

for i in 'cat authomatic_test.txt'
do
  grep -e "#" -e "PASS" /home/hpz440/Documents/P/example/input/$i > /home/hpz440/Documents//example/output/$i'_PASS'.vcf
  echo $i
done

但是我收到此错误:

  

bash:/home/hpz440/Documents/example/output/$i'_PASS'.vcf:模糊重定向

我的列表是这样的txt文件:

hpz440@yasminlima:~/Documents//example/input$ cat authomatic_test.txt 

/home/hpz440/Documents/example/input/file1.vcf
/home/hpz440/Documents/example/input/file2.vcf

有人可以给我个灯吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

for i in 'cat authomatic_test.txt'
# i='cat authomatic_test.txt'
... > /home/hpz440/Documents//example/output/$i'_PASS'.vcf

变量i中有一个空格。重定向的目标位置允许使用带空格的变量扩展,但是模棱两可-空格应该是文件名的一部分,还是应该将令牌拆分为文件名和参数? Bash打印ambiguous redirect错误,因为它无法解析目标。 Shell扩展后,它扩展为:

... > /home/hpz440/Documents//example/output/cat authomatic_test.txt'_PASS'.vcf

您想要的是什么

while IFS= read -r line; do
    grep -e "#" -e "PASS" /home/hpz440/Documents/P/example/input/"$i" > /home/hpz440/Documents//example/output/"$i"_PASS.vcf
done < authomatic_test.txt

请记住要正确理解和使用quotes