for循环中的算术运算

时间:2015-11-12 21:17:47

标签: shell

我有一个C ++代码,我想将其转换为POSIX sh代码:

for(int j=(i-(i%9)); j<((i-(i%9))+9); j++)
{
    ...
}

我的问题是如何将lopp转换为POSIX shell? 这不起作用:

for j in {{$i-($i%9)..{($i-(i%9)+9)}}
do
    echo $j;
done

1 个答案:

答案 0 :(得分:4)

如果你的shell是/bin/bash(正如最初指出的那样),那么改变的次数远远少于你认为的所需,因为bash supports C-style for loops。某些版本可以使用更加压缩的语法,但为了在解析器版本之间保持安全,建议使用空白是慷慨的:

for (( j = ( i - ( i % 9) ); j < ( ( i - ( i % 9 ) ) + 9 ); j++ )); do echo "$j"; done

/bin/sh相比:

j=$(( i - ( i % 9 ) ))
while [ "$j" -lt "$(( ( i - ( i % 9 ) ) + 9 ))" ]; do
  echo "$j"
  j=$(( j + 1 ))
done

至于你原来的尝试,在解析过程中很早就发生了大括号扩展 - 在任何变量出现之前&#39;价值已被评估;因此,它们不能与任何不静态的数字一起使用。