Как удалить элемент в массиве Bash? - PullRequest
1 голос
/ 27 января 2012

Я хотел бы передать все аргументы скрипта в функцию foo, а если первый аргумент something, передать все остальные аргументы в функцию bar.

Я реализовал это так:

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

foo $@

Возможно ли это упростить?

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Если вам не нужен массив args для чего-либо еще в foo, вы можете полностью избежать этого, как в ответе SiegeX.Если вам нужна args по какой-то другой причине, то вы делаете это самым простым способом.

В вашем коде есть ошибка.Когда вы звоните bar, вы передаете только первый элемент args.Чтобы пройти все элементы, вам нужно сделать следующее:

bar "${args[@]}"
3 голосов
/ 27 января 2012

Да, используйте shift

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

foo "$@"
...