如何删除 Bash 数组中的项目?

发布于 2024-12-29 04:18:07 字数 266 浏览 5 评论 0原文

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

我是这样实现的:

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

foo $@

可以简化吗?

I would like to pass all script arguments to the foo function, and if the first argument is something, pass all the rest arguments to the bar function.

I implemented this like that:

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

foo $@

Is that possible to simplify this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷雾森÷林ヴ 2025-01-05 04:18:07

是的,使用 shift

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

foo "$@"

Yes, use shift

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

foo "$@"
诗笺 2025-01-05 04:18:07

如果您不需要 args 数组来处理 foo 中的其他内容,您可以完全避免它,就像 SiegeX 的答案一样。如果您出于其他原因需要 args,那么您正在做的就是最简单的方法。

您的代码中有一个错误。当您调用 bar 时,您仅传递 args 的第一个元素。要传递所有元素,您需要执行以下操作:

bar "${args[@]}"

If you don't need the args array for anything else in foo, you can avoid it entirely as in SiegeX's answer. If you need args for some other reason, what you are doing is the simplest way.

There is a bug in your code. When you call bar, you're only passing the first element of args. To pass all elements, you need to do this:

bar "${args[@]}"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文