在下面的 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 循环中的输出重定向到变量文件名?
您必须在变量名称周围使用花括号或双引号。以下循环有效。
否则 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)