如何删除Bash数组中的项?

时间:2012-01-27 04:17:10

标签: arrays bash arguments command-line-arguments

我想将所有脚本参数传递给foo函数,如果第一个参数是something,则将所有其余参数传递给bar函数。

我实现了这个:

foo() {
  if [ "$1" = 'something' ]; then
    args=("$@")
    unset args[0]
    bar $args
  fi
}

foo $@

这可以简化这个吗?

2 个答案:

答案 0 :(得分:3)

是的,请使用shift

foo(){ 
  if [[ $1 == 'something' ]]; then
    shift
    bar "$@" 
  fi
}

foo "$@"

答案 1 :(得分:3)

如果args中的任何其他内容都不需要foo数组,则可以完全避免使用SiegeX的答案。如果由于其他原因需要args,那么您所做的是最简单的方法。

您的代码中存在错误。当您致电bar时,您只会传递args的第一个元素。要传递所有元素,您需要这样做:

bar "${args[@]}"