【问题标题】:How to use a pipe in a foreach statement如何在 foreach 语句中使用管道
【发布时间】:2010-03-08 23:21:23
【问题描述】:

我想在 bash 中运行一个 for 循环,例如:

for i in user_* do; cat $i | ./fetch_contact.php ; done;

总是给出类似的错误

-bash:意外标记“完成”附近的语法错误

我认为它与管道有关,但我尝试添加的任何内容(括号等)都没有充分包裹管道。如何在这样的命令中使用管道?

【问题讨论】:

    标签: bash


    【解决方案1】:

    在 Bash 中,do is a command。此外,它是for 而不是foreach。这是修复:

    for i in user_*; do cat $i | ./fetch_contact.php; done;
    

    【讨论】:

      【解决方案2】:

      事实证明,正确使用分号和其他所有内容会使整个管道问题变得毫无意义。

      for i in user_*; do cat $i | ./fetch_contact.php; done;
      

      【讨论】:

        【解决方案3】:

        为什么要循环?

        cat user_* | ./fetch_contact.php

        【讨论】:

        • 因为这会在将所有文件提供给脚本之前连接所有文件,这可能不是 OP 想要的。
        • 如果 OP 像他在问题中发布的那样运行它,那么将所有内容都写入 php 脚本相当于使用 for 循环。
        【解决方案4】:

        foreach i in user_*; do cat $i | ./fetch_contact.php ; done;

        分号应该放在do 之前,而不是之后。

        【讨论】:

          【解决方案5】:

          不需要cat:

          for i in user_* ; do ./fetch_contact.php < "$i" ; done
          

          【讨论】:

            【解决方案6】:

            这里有一些检查

            for file in user_*
            do
              if [ -f "$file" ];then
                ./fetch_contact.php < "$file"
              fi
            done
            

            【讨论】:

              猜你喜欢
              • 2011-08-14
              • 2015-07-11
              • 1970-01-01
              • 1970-01-01
              • 2017-01-26
              • 2016-06-28
              • 2012-01-10
              • 2012-11-06
              • 1970-01-01
              相关资源
              最近更新 更多