如何在bash中使用命令输出作为循环条件?

时间:2015-08-22 11:28:45

标签: bash for-loop conditional-statements

我在PID运行时写了一个for循环来运行:

for (( j=0; (j < 40) && `kill -0 $pid` ; j++ )); do
  printf "."
  sleep 1
done

但它不起作用并显示以下错误:

line 98: ((: (j < 40) &&  : syntax error: operand expected (error token is "&&  ")

我尝试了其他选项,例如:

for (( j=0; (j < 40) && (kill -0 $pid) ; j++ )); do
for (( j=0; ((j < 40)) && ((kill -0 $pid)) ; j++ )); do
for (( j=0; ( ((j < 40)) && ((kill -0 $pid)) ) ; j++ )); do
for (( j=0; [ ((j < 40)) && ((kill -0 $pid)) ] ; j++ )); do
for (( j=0; ((j < 40)) && [kill -0 $pid] ; j++ )); do

但以上所有变化都会导致一些错误。

1 个答案:

答案 0 :(得分:2)

您不能在((...))的算术评估上下文中使用命令替换。将它重写为while循环可能最简单。

tries=0
while kill -0 $pid; do
  (( tries++ > 40 )) && break
  printf "."
  sleep 1
done