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

时间:2015-03-12 21:40:38

标签: shell busybox ash

下面的函数最初是一个bash函数。我需要它在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 个答案:

答案 0 :(得分:3)

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

改为使用

if [ $# -ne 1 ]