Bash foreach循环

我有一个input(比方说一个文件)。 每行都有一个文件名。 我怎样才能读取这个文件并显示每个文件的内容。

这样的事情会做:

xargs cat <filenames.txt 

xargs程序读取它的标准input,并且对于每一行input以input行作为参数运行cat程序。

如果你真的想循环做到这一点,你可以:

 for fn in `cat filenames.txt`; do echo "the next file is $fn" cat $fn done 

“foreach”不是bash的名字。 这只是“为了”。 你可以只用一行来做事情,就像:

 for fn in `cat filenames.txt`; do cat "$fn"; done 

参考: http : //www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/

这是一个while循环:

 while read filename do echo "Printing: $filename" cat "$filename" done < filenames.txt 
 xargs --arg-file inputfile cat 

这将输出文件名后跟文件的内容:

 xargs --arg-file inputfile -I % sh -c "echo %; cat %" 

你可能会想要处理你的文件名中的空格,虽然他们是可恶的:-)

所以我会select最初的东西,如:

 pax> cat qq.in normalfile.txt file with spaces.doc pax> sed 's/ /\\ /g' qq.in | xargs -n 1 cat <<contents of 'normalfile.txt'>> <<contents of 'file with spaces.doc'>> pax> _ 
 cat `cat filenames.txt` 

会做的伎俩