Bash for 循环将输出重定向到变量文件名

Bash for 循环将输出重定向到变量文件名

在下面的 bash 循环中,我想将内容重定向到变量文件名中。

for i in {1..22};do echo $i > $i_output.txt; done

不幸的是,文件没有创建。我原本想做的是 grep 文件中的染色体并为每个染色体创建一个文件。但这不太容易测试:

for i in {1..22}; grep -E "[a-z]+[0-9]+\t$i\t" rawdata.txt > $i_chr.txt;done

我们如何将 for 循环中的输出重定向至变量文件名?

答案1

您必须使用花括号或双引号将变量名括起来。以下循环有效。
否则,shell 将尝试扩展变量$i_output

for i in {1..22};do echo ${i} > ${i}_output.txt; done
for i in {1..22};do echo "$i" > "$i"_output.txt; done

在您的情况下,花括号可能是更好的选择,因为您已经使用双引号,并且您的 shell 在整理内外双引号时会遇到问题。

for i in {1..22}; grep -E "[a-z]+[0-9]+\t${i}\t" rawdata.txt > ${i}_chr.txt;done

相关内容