错误 sh: 0: 将 bash 函数转换为 sh 时未找到

error sh: 0: not found while converting bash function to sh

下面的函数原来是一个bash函数。我需要它 运行 in busybox 1.22 ash shell。

dockerip() {
  if (( $# != 1 ))
  then
    for d in $(docker ps -q)
    do
      name=$(docker inspect -f {{.Name}} $d)
      ip=$(docker inspect -f {{.NetworkSettings.IPAddress}} $d)
      printf "%-15s | %15s\n" $name $ip
    done
  fi
}

当上面的代码加载 source 和 运行 作为 dockerip 时,busybox shell 输出:sh: 0: not found。不是一个非常有用的错误所以我的问题是错误是什么意思以及上面函数的哪些部分不兼容 busybox 1.22?

这个算术表达式(( $# != 1 ))是bash语法。在 ash 中,它启动 2 个嵌套的子 shell,然后执行带有参数“!=”和“1”的程序“$#”。

改用这个

if [ $# -ne 1 ]