我有一个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
答案 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;价值已被评估;因此,它们不能与任何不静态的数字一起使用。