如何修复执行读取文本文件的循环时不明确的重定向



>我在尝试通过文件列表执行命令时收到错误模糊的重定向。我已经测试过该命令在逐个文件执行循环文件时效果很好。

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

谁能给我一盏灯?

谢谢!

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

变量i中有一个空格。在重定向的目标中允许使用空格进行变量扩展,但范围不明确 - 空格应该是文件名的一部分,还是应该将令牌拆分为文件名和参数?Bash 打印ambiguous redirect错误,因为它无法解析目标。外壳扩展后,它扩展到:

... > /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

记住正确理解和使用引号。

最新更新