这个bash“while”语句的POSIX shell版本是什么?

Giu*_*ppe 3 shell bash posix

我正在编写(或尝试编写)一个小程序POSIX sh(遵循 的警告ShellCheck)。
我特别关注关于循环的警告,考虑到双括号,在 POSIX 中该循环是错误的。

你能告诉我POSIX sh这段代码的版本是什么:

 while (( "$#" )); do
    case "$1" in
      [...]
    esac
    shift
 done
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 13

编写此条件的符合 POSIX 的方法是

while [ "$#" -gt 0 ]; do
Run Code Online (Sandbox Code Playgroud)

正如jesse_b所说,如果您正在分析标志,您可能想要使用getopts(由 POSIX 定义)。

  • @LinuxSecurityFreak 请参阅 [this answer](https://unix.stackexchange.com/a/171347/116858) 的一部分,以解释为什么这可能是必要的。 (3认同)
  • @LinuxSecurityFreak ShellCheck _假设_所有 shell 都清除了 `IFS` 或 `IFS` 不包含数字。我认为这是 ShellCheck 中的一个 buglet。 (2认同)