Bash 使用循环变量的shell脚本打印到多个文件

Bash 使用循环变量的shell脚本打印到多个文件,bash,for-loop,Bash,For Loop,没有任何文件显示,我尝试将要写入的文件放在引号中,但没有写入任何文件。我得到的是一个名为person.txt的文件 #!/bin/sh cut -f 1 $1 > temp1.txt cut -f 2-3 $2 > temp2.txt for ((i=3;i<103;i++)); do cut -f $i $1 > temp3.txt paste temp1.txt temp2.txt temp

没有任何文件显示,我尝试将要写入的文件放在引号中,但没有写入任何文件。我得到的是一个名为person.txt的文件

   #!/bin/sh
    cut -f 1 $1 > temp1.txt
    cut -f 2-3 $2 > temp2.txt
    for ((i=3;i<103;i++)); do
            cut -f $i $1 > temp3.txt
            paste temp1.txt temp2.txt temp3.txt > $HOME/Desktop/Plots/person$iPlot.txt
    done
#/垃圾箱/垃圾箱
剪切-f 1$1>temp1.txt
剪切-f 2-3$2>temp2.txt
对于((i=3;i temp3.txt
粘贴temp1.txt temp2.txt temp3.txt>$HOME/Desktop/Plots/person$iPlot.txt
完成

在未进行测试的情况下,脚本中的一个问题是

 $HOME/Desktop/Plots/person$iPlot.txt
Bash不会像您期望的那样替换变量
i
,而是尝试解析变量
iPlot
。由于此变量未被赋值,您将得到
person.txt
。当Bash尝试将变量解析为以空格或句点分隔的完整单词时,会出现这种情况

要确保使用了变量
i
,请尝试

$HOME/Desktop/Plots/person${i}Plot.txt

相反。

谢谢!!你知道为什么运行起来需要几分钟吗?每列大约有20000行,但我觉得这些命令仍然足够简单,但可能我错了。你做了大量的文件I/O。将名为
$1
的文件读入内存一次,然后在列上迭代,这样会更快广告每次都会重新读取该文件,只是为了得到一列。@B.Monster请参阅chepner的评论。我们需要说明此代码的作用。目前很难区分代码的错误和特性。