使用管道Bash for循环语法错误

时间:2012-10-19 14:41:46

标签: bash

我正在尝试这个命令

for x in qstat -u '*' | grep Eqw | awk {'print $1'}; do qmod -cj $x; done

并最终出现此错误:

-bash: syntax error near unexpected token `|'

我尝试用各种引号和括号包装我的qstat命令无济于事,我做错了什么?

4 个答案:

答案 0 :(得分:6)

由于您似乎想要遍历结果,因此请将其更改为:

for x in `qstat -u '*' | grep Eqw | awk {'print $1'}`; do qmod -cj $x; done

答案 1 :(得分:4)

优化版本将是:

for x in $(qstat -u '*' | awk '/Eqw/{print $1}'); do qmod -cj "$x"; done
  • backquote(`)用于旧式命令替换。建议使用foo = $(命令)语法。 $()内的反斜杠处理不那么令人惊讶,$()更容易嵌套。请参阅http://mywiki.wooledge.org/BashFAQ/082
  • awk可以gret hitself

答案 2 :(得分:0)

请改用此脚本:

for x in $(qstat -u * | awk '/Eqw/ {print $1}')
do
    qmod -cj $x
done

答案 3 :(得分:0)

应该是:

for x in $(qstat -u '*' | grep Eqw | awk '{print $1}'); do qmod -cj $x; done