Bash foreach循环

dan*_*car 151 bash foreach

我有一个输入(让我们说一个文件).每行都有一个文件名.如何阅读此文件并显示每个文件的内容.

Gre*_*ill 226

这样的事情会做:

xargs cat <filenames.txt
Run Code Online (Sandbox Code Playgroud)

xargs程序读取它的标准输入,以及用于输入的每一行的运行cat与输入线作为参数(一个或多个)程序.

如果你真的想在循环中这样做,你可以:

for fn in `cat filenames.txt`; do
    echo "the next file is $fn"
    cat $fn
done
Run Code Online (Sandbox Code Playgroud)

  • 当文件名包含空格时,这两个都不起作用。 (3认同)

小智 42

"foreach"不是bash的名字.它只是"为了".您可以在一行中执行以下操作:

for fn in `cat filenames.txt`; do cat "$fn"; done
Run Code Online (Sandbox Code Playgroud)

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


dog*_*ane 17

这是一个while循环:

while read filename
do
    echo "Printing: $filename"
    cat "$filename"
done < filenames.txt
Run Code Online (Sandbox Code Playgroud)

  • 与此处的大多数其他答案不同,即使文件名包含空格,这个答案也确实有效。 (2认同)

Isr*_*l P 6

如果它们都具有相同的扩展名(例如 .jpg),您可以使用以下命令:

for picture in  *.jpg ; do
    echo "the next file is $picture"
done
Run Code Online (Sandbox Code Playgroud)

(如果文件名有空格,此解决方案也适用)

  • 我认为在某些情况下,用引号将 `*.jpg` 括起来是有用的,IIRC: `for picture in "*.jpg";`... (2认同)

Pau*_*ce. 5

xargs --arg-file inputfile cat
Run Code Online (Sandbox Code Playgroud)

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

xargs --arg-file inputfile -I % sh -c "echo %; cat %"
Run Code Online (Sandbox Code Playgroud)