【问题标题】:Bash foreach loopBash foreach 循环
【发布时间】:2011-05-08 22:46:35
【问题描述】:

我有一个输入(比如说一个文件)。 每行都有一个文件名。 如何读取此文件并显示每个文件的内容。

【问题讨论】:

    标签: bash foreach


    【解决方案1】:

    这样的事情会做:

    xargs cat <filenames.txt
    

    xargs 程序读取其标准输入,并针对每一行输入运行 cat 程序,并将输入行作为参数。

    如果您真的想循环执行此操作,您可以:

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

    【讨论】:

    • 当文件名包含空格时,这两种方法都不起作用。
    • @mivk 你可以逃离空间
    【解决方案2】:

    “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/

    【讨论】:

      【解决方案3】:

      这是一个while 循环:

      while read filename
      do
          echo "Printing: $filename"
          cat "$filename"
      done < filenames.txt
      

      【讨论】:

      • 这应该是最好的方法。您可以在 read 中使用 '-r' 和 '-d' 选项
      • 与这里的大多数其他答案不同,这个答案确实有效,即使文件名包含空格。
      【解决方案4】:
      xargs --arg-file inputfile cat
      

      这将输出文件名和文件内容:

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

      【讨论】:

        【解决方案5】:

        您可能希望处理文件名中的空格,尽管它们很可恶:-)

        所以我最初会选择类似的东西:

        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> _
        

        【讨论】:

          【解决方案6】:
          cat `cat filenames.txt`
          

          会成功的

          【讨论】:

            【解决方案7】:

            如果它们都有相同的扩展名(例如 .jpg),你可以使用这个:

            for picture in  *.jpg ; do
                echo "the next file is $picture"
            done
            

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

            【讨论】:

            • 我认为在某些情况下使用引号将*.jpg 括起来很有用,IIRC:for picture in "*.jpg";...
            猜你喜欢
            • 2021-05-28
            • 1970-01-01
            • 2016-09-26
            • 2012-07-19
            • 2020-02-19
            • 2014-03-15
            • 1970-01-01
            • 2015-07-04
            相关资源
            最近更新 更多