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

Rob*_* D. 5 bash

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

for i in {1..22};do echo $i > $i_output.txt; done
Run Code Online (Sandbox Code Playgroud)

不幸的是,这些文件没有创建。我最初想做的是 grep 文件中的染色体并为每个染色体创建一个文件。但这不太可测试:

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

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

Tho*_*mas 2

您必须在变量名称周围使用花括号或双引号。以下循环有效。
否则 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
Run Code Online (Sandbox Code Playgroud)

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

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