Shell POSIX sh循环语法[SC2039]

Shell POSIX sh循环语法[SC2039],shell,for-loop,posix,Shell,For Loop,Posix,以下命令在我的shell上运行良好: for ((j=0; j<=24; j++)) do > $j.json done ((j=0;j$j.json)的 完成 但有下列通知: POSIX sh中的SC2039,循环的算术未定义 我想知道,为了避免在其他系统上出现对话问题,POSIX中的等效功能是什么。我想符合标准的方式应该是这样的: j=0 while [ $j -le 24 ]; do true > "$j.json" j=$(( j + 1 )) do

以下命令在我的shell上运行良好:

for ((j=0; j<=24; j++))
do > $j.json
done
((j=0;j$j.json)的

完成
但有下列通知:

POSIX sh中的SC2039,循环的算术未定义


我想知道,为了避免在其他系统上出现对话问题,POSIX中的等效功能是什么。

我想符合标准的方式应该是这样的:

j=0
while [ $j -le 24 ]; do
    true > "$j.json"
    j=$(( j + 1 ))
done

在POSIX shell中工作的另一种方式:

for j in `seq 0 24`; do
    ...
done

几乎:使用
$(++j))
和IIRC一个单独的重定向也是无效的,使用
:>“$j.json”
代替。是的,POSIX调用
)中的外壳扩展(否则它将是子外壳中的子外壳)。@izabera啊,是的,标准说sizeof()操作符以及前缀和后缀“++”和“-”不需要运算符..我只是编辑以更改另请注意,
是一个特殊的内置项,因此如果由于任何原因(例如权限)重定向失败,该错误是致命的。最好使用
true
而不是
在这种情况下,是什么系统或工具给出了这么好的可移植性提示?@Jens-ineed,thx@另一个家伙,如果您使用的是非POSIX
seq
。在使用shellcheck等工具时,您可能会收到一些“未使用的变量”警告(尽管我不确定这是否应该被视为shellcheck bug)。